文章目录

  • 1 简介
  • 2 主要器件
    • 2.1 ESP32-CAM 模块
    • 2.2 红外热释电传感器
  • 3 实现效果
  • 4 部分实现代码
  • 5 最后

1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目

基于单片机的家庭智能监控系统

大家可用于 课程设计 或 毕业设计

单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052

2 主要器件

  • 红外传感器-7m
  • ESP32-CAM
  • USB到TTL串行转换器5V
  • 主控MCU(可选)

2.1 ESP32-CAM 模块


模块包含一块ESP32-CAM的MCU和一个OV2640的200W像素摄像头,ESP32-CAM除了支持OV2640外还支持OV7670摄像头,不过7670只有30W像素

2.2 红外热释电传感器

3 实现效果

当是房间内有人出现,摄像头自动打开,通过手机或者电脑浏览就可以访问摄像头

4 部分实现代码

部分关键代码:

/*
albino98
https://github.com/albino98/telegram_esp32.git
*/
#ifdef ESP32#include <WiFi.h>
#else#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>   // Universal Telegram Bot Library written by Brian Lough: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
#include <ArduinoJson.h>
#include "esp_camera.h"
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "driver/rtc_io.h"
// Replace with your network credentials
const char* ssid = "NetworkName";
const char* password = "NetworkPW";
const int motionSensor = 13;int armed = 1;#define BOTtoken "xxxxxxx:xxxxxxxxxxxxxxxxxx"  // your Bot Token (Get from Botfather)// Use @myidbot to find out the chat ID of an individual or a group
#define CHAT_ID "xxxxxxx"//Pin definition for CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM  32
#define RESET_GPIO_NUM  -1
#define XCLK_GPIO_NUM  0
#define SIOD_GPIO_NUM  26
#define SIOC_GPIO_NUM  27
#define Y9_GPIO_NUM  35
#define Y8_GPIO_NUM  34
#define Y7_GPIO_NUM  39
#define Y6_GPIO_NUM  36
#define Y5_GPIO_NUM  21
#define Y4_GPIO_NUM  19
#define Y3_GPIO_NUM  18
#define Y2_GPIO_NUM  5
#define VSYNC_GPIO_NUM  25
#define HREF_GPIO_NUM  23
#define PCLK_GPIO_NUM  22WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);// Checks for new messages every 1 second.
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;const int ledPin = 4;
bool ledState = LOW;
camera_fb_t * fb;
uint8_t* fb_buffer;
size_t fb_length;
int currentByte;
boolean startTimer = false;
// Handle what happens when you receive new messages
void handleNewMessages(int numNewMessages) {Serial.println("handleNewMessages");Serial.println(String(numNewMessages));for (int i=0; i<numNewMessages; i++) {// Chat id of the requesterString chat_id = String(bot.messages[i].chat_id);if (chat_id != CHAT_ID){bot.sendMessage(chat_id, "Unauthorized user", "");continue;}// Print the received messageString text = bot.messages[i].text;Serial.println(text);String from_name = bot.messages[i].from_name;if (text == "/start") {String welcome = "Welcome, " + from_name + ".\n";welcome += "Use the following commands to control your outputs.\n\n";welcome += "/take_photo to take a picture \n";welcome += "/arm to arm the security system \n";welcome += "/disarm to disarm the security system \n";welcome += "/led_on to turn GPIO ON \n";welcome += "/led_off to turn GPIO OFF \n";welcome += "/state to request current GPIO state and security system state \n";bot.sendMessage(chat_id, welcome, "");}if (text == "/led_on") {bot.sendMessage(chat_id, "LED state set to ON", "");ledState = HIGH;digitalWrite(ledPin, ledState);}if (text == "/led_off") {bot.sendMessage(chat_id, "LED state set to OFF", "");ledState = LOW;digitalWrite(ledPin, ledState);}if (text == "/take_photo") {take_send_photo(CHAT_ID);}if (text == "/security_on") {armed = 1;bot.sendMessage(chat_id, "Security System is ON", "");}if (text == "/security_off") {armed = 0;bot.sendMessage(chat_id, "Security System is OFF", "");}if (text == "/state") {if (digitalRead(ledPin)){bot.sendMessage(chat_id, "LED is ON", "");}else{bot.sendMessage(chat_id, "LED is OFF", "");}if(armed == 1){bot.sendMessage(chat_id, "The security system is ON", "");}else {bot.sendMessage(chat_id, "The security system is OFF", "");  }}}
}bool isMoreDataAvailable() {return (fb_length - currentByte);
}uint8_t photoNextByte() {currentByte++;return (fb_buffer[currentByte - 1]);
}void take_send_photo(String chat_id)
{camera_fb_t * fb = NULL;fb = esp_camera_fb_get();currentByte = 0;fb_length = fb->len;fb_buffer = fb->buf;bot.sendPhotoByBinary(chat_id, "image/jpeg", fb->len, isMoreDataAvailable, photoNextByte, nullptr, nullptr);esp_camera_fb_return(fb);fb_length = NULL;fb_buffer = NULL;
}void setup() {armed = 1;WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG,0);//disable brownout detectorSerial.begin(115200);camera_config_t configg;configg.ledc_channel = LEDC_CHANNEL_0;configg.ledc_timer = LEDC_TIMER_0;configg.pin_d0 = Y2_GPIO_NUM;configg.pin_d1 = Y3_GPIO_NUM;configg.pin_d2 = Y4_GPIO_NUM;configg.pin_d3 = Y5_GPIO_NUM;configg.pin_d4 = Y6_GPIO_NUM;configg.pin_d5 = Y7_GPIO_NUM;configg.pin_d6 = Y8_GPIO_NUM;configg.pin_d7 = Y9_GPIO_NUM;configg.pin_xclk = XCLK_GPIO_NUM;configg.pin_pclk = PCLK_GPIO_NUM;configg.pin_vsync = VSYNC_GPIO_NUM;configg.pin_href = HREF_GPIO_NUM;configg.pin_sscb_sda = SIOD_GPIO_NUM;configg.pin_sscb_scl = SIOC_GPIO_NUM;configg.pin_pwdn = PWDN_GPIO_NUM;configg.pin_reset = RESET_GPIO_NUM;configg.xclk_freq_hz = 20000000;configg.pixel_format = PIXFORMAT_JPEG;pinMode(ledPin, OUTPUT);digitalWrite(ledPin, ledState);rtc_gpio_hold_dis(GPIO_NUM_4);pinMode(GPIO_NUM_13, INPUT_PULLUP);if(psramFound()){configg.frame_size = FRAMESIZE_UXGA;configg.jpeg_quality = 10;configg.fb_count = 2;}else{configg.frame_size = FRAMESIZE_SVGA;configg.jpeg_quality = 12;configg.fb_count = 1;}//Init Cameraesp_err_t err = esp_camera_init(&configg);if(err != ESP_OK){Serial.printf("Camera init failed with error");  return;}// Connect to Wi-FiWiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println("Connecting to WiFi..");}// Print ESP32 Local IP AddressSerial.println(WiFi.localIP());}void loop() {if(armed == 1){int isDetected = digitalRead(13);if(isDetected == 1){Serial.println("Presence detected");take_send_photo(CHAT_ID);delay(3000);}}//delay(1000);//if (millis() > lastTimeBotRan + botRequestDelay)  {int numNewMessages = bot.getUpdates(bot.last_message_received + 1);while(numNewMessages) {Serial.println("got response");handleNewMessages(numNewMessages);numNewMessages = bot.getUpdates(bot.last_message_received + 1);}delay(1000);lastTimeBotRan = millis();// }
}

单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052

5 最后

【毕业设计】基于单片机的家庭智能监控系统 - 物联网 stm32 嵌入式相关推荐

  1. 【毕业设计】基于单片机的智能衣柜系统设计 - 物联网 stm32 嵌入式

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 硬件系部分 3.2 软件部分 3.1 系统架构 3.2 硬件设计 3.3 软件设计 主程序介绍 按键扫描程序设计流程 DHT ...

  2. 【毕业设计1】基于单片机的智能灌溉系统 - 物联网 嵌入式 stm32 c51

    文章目录 1 简介 2 实现功能 3 主要器件 3.1 器件列表 3.2 器件连接 3.3 OLED 显示屏 4 实现效果 5 实现代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介 ...

  3. 【毕业设计】基于单片机的智能水箱系统 - 物联网 嵌入式 stm32

    文章目录 1 简介 2 概述 2.1 系统描述 2.2 系统目标 3 具体实现 3.1 系统组成架构 3.2 系统功能 3.3 系统特点 3.4 水位检测及自动供水实现 3.5 水箱盖监控实现 3.6 ...

  4. 计算机毕业设计基于asp.net家庭个人理财系统

    随着计算机技术的飞速发展,计算机在系统管理中的应用越来越普及,利用计算机实现各个系统的管理显得越来越重要.随着人们销售水平的提高,消费量一直在加大 ,可是如何能够合理的管理和记录自己的消费方向是一个很 ...

  5. 毕业设计 基于单片机的智能窗户系统(源码+硬件+论文)

    文章目录 0 前言 1 主要功能 2 硬件设计(原理图) 3 核心软件设计 4 实现效果 5 最后 0 前言

  6. 【毕业设计项目】基于ESP32的家庭气象站系统 - stm32 物联网 嵌入式 单片机

    文章目录 1 简介 2 主要器件 引脚连接 3 实现效果 4 部分实现代码 5 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目 基于ESP32的家庭气象站系统 大家 ...

  7. 【毕业设计】基于单片机的门禁系统 - 嵌入式 物联网

    文章目录 1 简介 2 课题背景 3 详细设计 3.1 整体设计方案 3.2 功能模块 3.3 软件设计 4 实现效果 5 部分实现代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介 ...

  8. 毕业设计 基于单片机的智能门禁系统

    文章目录 1 简介 2 课题背景 3 详细设计 3.1 整体设计方案 3.2 功能模块 3.3 软件设计 4 实现效果 5 部分实现代码 6 最后 1 简介 Hi,大家好,学长今天向大家介绍一个学长做 ...

  9. 计算机应用深圳职业大三毕业设计,毕业设计(论文)文献综述-基于Web的家庭理财系统.docx...

    )4事欷夭2噹母院 本科生毕业设计(论文)文献综述 设计(论文)题目 基于Web的家庭理财系统 设计与实现 作者所在院系 作者所在专业 作者所在班级 计算机与遥感信息技术学院 软件工程 作者姓名 作者 ...

最新文章

  1. 【转】线段树题目 汇总 讲解(by not only success)
  2. Inno Setup 5制作安装程序
  3. PHP脚本占用内存太多,解决方案
  4. word2vec, LSTM Speech Recognition实战, 图数据库
  5. 做一个中国式站长必须知道的五十个问题
  6. day15 java的抽象类
  7. spark学习-Spark的Core理解
  8. linux下Makefile学习--注释很好
  9. 在线多空行只保留一个工具
  10. 【数据结构(C语言)】数据结构-表
  11. 经典领导选举算法:Bully 算法
  12. JS9 -- switch
  13. SAP License:财务流程-新
  14. Graphics.DrawLine 方法
  15. Python:实现拓扑排序算法(附完整源码)
  16. 国际冠码与国际电话区号
  17. 不要时刻忘记保持微笑
  18. MQTT在线公共的MQTT服务器
  19. 矩阵快速幂(矩阵加速)
  20. CentOS7 云服务器(ECS)挂载磁盘教程(简明完整梳理版)

热门文章

  1. pyspark:导入第三方包
  2. 史上最详细的Vmware安装教程(一)-创建Linux虚拟机
  3. linux运行php文件
  4. 中国膨润土市场消费状况与投资盈利预测报告(2022-2027年)
  5. 【Doxygen使用教程】
  6. Simscape Multibody Contact Forces Libray
  7. STM32 PS2游戏摇杆 测试
  8. 【VMware】虚拟机不能全屏的解决方法
  9. 无能狂怒之我对配置类一无所知之自动填充和分页
  10. ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)