|
本帖最后由 Leslie1995 于 2020-7-1 12:27 编辑
前言
最近获得一块8266,一直想做过远程交互之类的东西,正好可以最一下,已经很久没有使用arduino了,基本啥都不会,重头学习一下,下面是这几天做的东西,由于会点小程序,就使用小程序尝试来进行交互实验。
主要功能:
- ESP8266通过HDC1080采集到温湿度,送到服务器,再到小程序显示,也可以网页或者其他方式。
- 小程序能远程控制led的亮灭。
这里很感谢群主奈何的温湿度传感器的测评和HDC1080例程,还有海神的dth11教程,虽然最终没有使用dth11,但是最初是用dth11,因为HDC1080还没有到,后面只是直接换成了HDC使用,同时也感谢博哥ESP8288系列,提供很多思路和基础知识。
一、材料
- esp8266-12(e)
- HDC1080高精度温湿度(原本用dth11,后来看了群主奈何的帖子就采用了这个)
- led
- 电源
- 备案服务器(小程序要求比较多,不使用小程序可以不需要)
- 小程序测试号
二、原理
- ESP8266通过HDC1080采集到温湿度,送到服务器,再到小程序。ESP8266——》》服务器———》》小程序
- 控制LED亮灭。小程序——》》服务器———》》ESP8266(进行交互)
- 个人觉得使用用服务器的好处在于无论网页,还是APP,小程序都可以多端交互。
- 注意:由于本人不太熟ESP8266,技术水平有限,这里是偷懒行为,由ESP8266发送数据到服务器的同时,服务器返回LED的状态,所以并不是完全实时控制,有延时,本实验使用的是每秒发送数据(向服务器发GET的请求),所以LED的状态的实际变化由delay的时间决定。
三、程序
这为什么需要一个blink例程呢,因为ESP8266的针脚和arduino并不通用,因为第一次使用ESP8266,被坑了,大体没有差别唯一差别在于初始化定义方式- #define PIN D2//ESP8266
- #define PIN 2//Arduino[/mw_shl_code]
- blink例程[mw_shl_code=arduino,true]/**
- * ESP8266-12(E)blink例程
- * @author 沉默
- * @date 2019/09/21
- */
- void setup() {
- pinMode(D2, OUTPUT); // 初始化D2引脚为输出引脚,arduino不需要D,ESP8266需要D
- }
- void loop() {
- digitalWrite(D2, HIGH); // 亮灯
- delay(1000); // 延时1s
- digitalWrite(D2, LOW);// 灭灯
- delay(1000); // 延时1s
- }
复制代码
参考群主奈何的帖子
[经验] 九种温湿度传感器使用对比体验
[分享] HDC1080温湿度传感器接入blinker演示
驱动库:https://github.com/closedcube/ClosedCube_HDC1080_Arduino
本人简化例程:
- * HDC1080例程
- * @author 沉默
- * @date 2019/09/21
- */
- #include <ClosedCube_HDC1080.h>
- ClosedCube_HDC1080 hdc1080;
- void setup()
- {
- Serial.begin(115200);
- hdc1080.begin(0x40);
- }
- void loop()
- {
- Serial.print("Temperature: ");
- Serial.print(hdc1080.readTemperature());
- Serial.println( "℃");
- Serial.print("Humidity: ");
- Serial.print(hdc1080.readHumidity());
- Serial.println( "%");
- delay(2000);
- }
复制代码
这个由博哥ESP8266系列,学习得来,这里非常感谢博哥ESP8266系列教程,从里面得到很多启发。
关于ESP8266基于arduino开发的相关库安装方法参考
[教程] 《博哥ESP8266系列1》- Arduino IDE for esp8266
BasicHTTPClient例程
这里完全可以有上面的库得到例程。
- #include <Arduino.h>
- #include <ESP8266WiFi.h>
- #include <ESP8266WiFiMulti.h>
- #include <ESP8266HTTPClient.h>
- #include <WiFiClient.h>
- ESP8266WiFiMulti WiFiMulti;
- void setup() {
- Serial.begin(115200);
- // Serial.setDebugOutput(true);
- Serial.println();
- Serial.println();
- Serial.println();
- for (uint8_t t = 4; t > 0; t--) {
- Serial.printf("[SETUP] WAIT %d...\n", t);
- Serial.flush();
- delay(1000);
- }
- WiFi.mode(WIFI_STA);
- WiFiMulti.addAP("SSID", "PASSWORD");
- }
- void loop() {
- // wait for WiFi connection
- if ((WiFiMulti.run() == WL_CONNECTED)) {
- WiFiClient client;
- HTTPClient http;
- Serial.print("[HTTP] begin...\n");
- if (http.begin(client, "http://jigsaw.w3.org/HTTP/connection.html")) { // HTTP
- Serial.print("[HTTP] GET...\n");
- // start connection and send HTTP header
- 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();
- Serial.println(payload);
- }
- } else {
- Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
- }
- http.end();
- } else {
- Serial.printf("[HTTP} Unable to connect\n");
- }
- }
- delay(10000);
复制代码
主要通过indexOf()函数,检查服务器返回的LED状态,来控制LED的变化。
- String payload = http.getString();
- if ( payload.indexOf("open") > 0) {
- Serial.println("open");
- digitalWrite(D3, HIGH);// 灭灯
- } else if (payload.indexOf("close") > 0) {
- Serial.println("close");
- digitalWrite(D3, LOW); // 亮灯
- } else {
- Serial.println("find null");
- }
复制代码
由于HDC1080返回的数值是float(好像是double),需要转换成String才可以,发送到服务器。
- //Temperature
- float temp = hdc1080.readTemperature();
- char tempstr[6];
- sprintf(tempstr, "%.2f", temp);
- String tempstring = tempstr;
复制代码
[url=]DHC1080ESP8266.rar[/url]
四、服务器和小程序
每个人都架构服务器的语言不一样所以这里不贴出来,(主要我写得太烂了),小程序也是。这里主要提供一些思路,由于我使用是小程序,小程序正式上线,需要审核,所以我这里只是用了测试,另外小程序连的服务器需要有合法域名,最好有证书(https),所以不一定用服务器+小程序,可以直接本地架构一个服务器,采用网页式,或者像其他一样使用别人的一些物联网平台。
五、成果展示
主要接线实在太丑了,而且没有只有一个手机,有需要或有机会再补充图片或视频。
串口数据:
小程序:
六、补充
上面有说,由于ESP8266跟arduino的根脚有区别,具体详细的可以去查资料,这里补充一个ESP8266的iic的接线图。
|
|