一、硬件设计
1. 硬件选型
主控:使用NodeMCU开发板。
人体感应器:使用PIR红外热释电人体感应模块,静态功耗小于0.1mA 。
2. 原理图设计
二、软件设计
1. ESP8266程序设计
1.1 ESP8266程序编写可以使用安信可提供的开发工具,也可以使用Arduino IDE来编写,
我使用的Arduino IDE来编写编写程序。
1.2 人体感应模块程序:PIR红外热释电人体感应模块是感应到人时输出高电平,人离开后输出低电平,因此在程序中检测人体感应模块OUT引脚的高低电平即可知道是否有人。
// 如果人体感应模块感应到人
if (digitalRead(PIR_SENSOR) == HIGH)
{
// 感应到人时的操作
// ...
// 蜂鸣器报警
digitalWrite(beep, HIGH);
}
// 如果人体感应模块没有感应到人
else
{
// 没有感应到人时的操作
// ...
// 关闭蜂鸣器
digitalWrite(beep, LOW);
}
1.3 OLED模块程序:本设计使用的是4 PIN的OLED模块,IIC通讯。使用OLED来显示是否有人闯入的信息。
// 引入库文件
#include
// 定义引脚
#define SCL D5 // OLED SCL
#define SDA D6 // OLED SDA
Adafruit_ssd1306syp display(SDA, SCL);
void setup() {
// 初始化OLED
display.initialize();
// ...
}
void loop() {
// 如果人体感应模块感应到人
if (digitalRead(PIR_SENSOR) == HIGH)
{
// OLED显示信息
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("isPerson YES");
}
// 如果人体感应模块没有感应到人
else
{
// OLED显示信息
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("isPerson NO");
}
// ...
}
1.4 蜂鸣器驱动程序:高电平时,三极管导通,蜂鸣器响;低电平时,三极管截止,蜂鸣器不响。
// 打开蜂鸣器
digitalWrite(beep, HIGH);
// 关闭蜂鸣器
digitalWrite(beep, LOW);
1.5 智能配网:本设计使用微信配网来实现ESP8266的智能配网。
// 引入头文件
#include
static WiFiClient espClient;
// 智能配网
void smartConfig()
{
// 设置WIFI模块为STA模式
WiFi.mode(WIFI_STA);
// smartconfig进行初始化
WiFi.beginSmartConfig();
// 等待连接成功
while (1)
{
digitalWrite(LED, LOW);
delay(500);
digitalWrite(LED, HIGH);
delay(500);
//如果连接成功
if (WiFi.smartConfigDone())
{
// 设置自动连接
WiFi.setAutoConnect(true);
break;
}
delay(1000);
}
}
// 自动配置
bool autoConfig()
{
WiFi.begin();
for (int i = 0; i < 20; i++)
{
int wstatus = WiFi.status();
if (wstatus == WL_CONNECTED)
{
WiFi.printDiag(Serial);
return true;
}
else
{
delay(1000);
}
}
Serial.println("自动配置失败" );
return false;
}
void setup() {
Serial.begin(9600);
if (!autoConfig())
{
// 进入智能配网模式
smartConfig();
}
}
1.6 连接阿里云物联网:本设计使用阿里云物联网平台实现数据上传云端,首先在阿里云物联网平台创建一个设备,获取到ProductKey,DeviceName,DeviceSecret后填写到代码中。
// 引入阿里云 IoT SDK
#include
// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "XXXXXXXXXXX" // ProductKey
#define DEVICE_NAME "XXXXXXX" // DeviceName
#define DEVICE_SECRET "XXXXXXXXXXXXXX" // DeviceSecret
#define REGION_ID "cn-shanghai" // 地区
void setup() {
// 初始化 iot,需传入 wifi 的 client,和设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
}
void loop() {
// 如果人体感应模块感应到人
if (digitalRead(PIR_SENSOR) == HIGH)
{
// 将信息上传阿里云物联网平台
AliyunIoTSDK::send("isPerson", YES);
// ...
}
// 如果人体感应模块没有感应到人
else
{
// 将信息上传阿里云物联网平台
AliyunIoTSDK::send("isPerson", NO);
}
AliyunIoTSDK::loop();
}
PIR红外热释电人体感应模块感应到人时,阿里云平台显示有人闯入;无人时显示无人。
1.7 微信小程序编写
资料下载(包含原理图、完整ESP8266程序、微信小程序源码)
https://item.taobao.com/item.htm?ft=t&id=681395870786