一. 项目介绍
这是我设计的智能家居IOT, 通过网页控制的灯泡亮灭, 并且实时显示温度的设备. API使用http://dweet.io/ 的免费API, 通过HTTP协议实现. 前端文件生成后挂载在Github上, 可以实现公网访问.
硬件:
主控使用的是ESP32, 温度传感器是美信的DS18B20, 通过ADI的ADP151AUJZ输入电源, 通过CH304实现串口通信
软件:
使用Aduino IDE进行开发, 主要使用到了SPI, Ticker, ESP32wifi, Wire, time等模块
网页部分使用VUE开发, 开发IDE为VScode
通信部分使用 http://dweet.io/ 的免费API实现通信, 单片机和网页通过API读写数据实现数据的传输, 实现公网的控制
系统框图:
二. 项目用到的板卡、芯片、模块、仪器、设备等介绍
ADP151AUJZ-3.3-R7
ADP151 是一款超低噪声、低压差线性稳压器,工作电压范围为 2.2 V 至 5.5 V,并提供高达 200 mA 的输出电流。 200 mA 负载下 140 mV 的低压差提高了效率并允许在较宽的输入电压范围内工作。 ADP151 采用创新的电路拓扑结构,无需旁路电容器即可实现超低噪声性能,非常适合对噪声敏感的模拟和 RF 应用。 ADP151 还实现了超低噪声性能,而不会影响 PSRR 或瞬态线路和负载性能。 200 mA 负载下 265 μA 的低静态电流使 ADP151 适用于电池供电的便携式设备。
DS18B20
DS18B20 数字温度计提供 9 位至 12 位摄氏温度测量值,并具有带有非易失性用户可编程上下触发点的报警功能。 DS18B20 通过 1-Wire 总线进行通信,根据定义,该总线只需要一根数据线(和地线)即可与中央微处理器进行通信。 它的工作温度范围为 -55°C 至 +125°C,在 -10°C 至 +85°C 的范围内精度为 ±0.5°C。 此外,DS18B20 可以直接从数据线获取电源(“寄生电源”),无需外部电源。
关键性代码及说明
-
WiFi配置
WiFi.mode(WIFI_STA); WiFiMulti.addAP("HUAWEI-B311-xxx", "xxxx");
- 通过GET方法连接API获得按键信息并且控制LED灯
int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); // file found at server if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { String payload = http.getString(); //size_t capacity=JSON_OBJECT_SIZE(2)+30; StaticJsonDocument<400> doc; //DynamicJsonDocument doc(capacity); deserializeJson(doc,payload); // Serial.println(payload); bool keyBool1=doc["with"][0]["content"]["key1"]; bool keyBool2=doc["with"][0]["content"]["key2"]; Serial.println(keyBool1); String keyS=doc["by"].as<String>(); Serial.println(keyS); if (keyBool1){Serial.println("key1 is on"); digitalWrite(LED1, LOW) ;} else {Serial.println("key1 is off");digitalWrite(LED1, HIGH);} if (keyBool2){Serial.println("key2 is on"); digitalWrite(LED2, LOW) ;} else {Serial.println("key2 is off");digitalWrite(LED2, HIGH);} } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } else { Serial.printf("[HTTP} Unable to connect\n"); }
三. 功能演示结果及说明
- 开机显示ID
- 同步数据, 并且显示温度
- 关闭LED
- 打开LED
四. 对本活动的心得体会
-
学会了如何使用温度传感器
- 学习了原理图和PCB的绘制
-
了解了IOT设备通过API配合前端的开发