我的Arduino之路-实现物联网应用(2)-Arduino中文社区 - Powered by Discuz! Archiver

zhuhai 发表于 2019-2-13 14:45

我的Arduino之路-实现物联网应用(2)

本帖最后由 zhuhai 于 2019-2-20 11:38 编辑

温习下小目标:
1)能测量温湿度(已达到)
2)能远程查看温湿度,历史数据曲线表达,能用手机看曲线
3)能远程控制设备运行

要实现远程查看温湿度,就要连上网,ESP8266成为不二之选,网上资料很多,最重要的是价格便宜
硬件准备,按需采购
https://www.arduino.cn/forum.php?mod=image&aid=49113&size=300x300&key=0ed7e36879a244f5&nocache=yes&type=fixnone
https://www.arduino.cn/forum.php?mod=image&aid=49106&size=300x300&key=efa83164f38ca2f4&nocache=yes&type=fixnone


第一步、TTL+ESP8266具体操作不再多言,下面参考文选中二位大师已写得很详细通过TTL用AT命令使ESP8266连上WIFI
这一步熟悉常用AT命令的使用

第二步、开发板+ESP8266
这一步只需将AT命令复制过来编译即可
这里要注意的是双引号,文本中出现了双引号,要在双引号前加上反\,告诉arduino这里有个双引号。
比如这样一句:
AT+CWJAP="zhu","12345678"
在arduino要写成:
Serial1.println("AT+CWJAP=\"zhu\",\"12345678\"");

第三步、TTL+ESP8266+网络调试助手
AT+RST//复位
AT+CWMODE=1//Station模式
AT+CWJAP="zhu","12345678"//连接路由
AT+CIPMUX=0 //单连接
AT+CIPSTART="TCP","192.168.10.24",8080//连接服务器,
AT+CIPSEND=20//设字串长度
这时在串口工具随便打点字符,20个以上,就可以在网络调试助手那边收到了,这里串打的字符通过ESP8266发送到网络调试助手,反向也一样,这是二个不同IP地址之间的通信。
下一步就是搬砖上开发板了



第四步、开发板+ESP8266+网络调试助手
ESP8266接在串口1上,这样串口0可以接串口工具调试
代码如下:
#include <stdlib.h>
void setup() {
Serial.begin(115200);
Serial1.begin(115200);
Serial1.println("AT");      //指令测试
    delay(2000);
    if(Serial1.find("OK"))   //接收指令正常则返回OK
    {
      Serial.println("esp8266: OK");
    }
Serial1.println("AT+CWMODE=1");
delay(2000);
Serial1.println("AT+RST");
delay(5000);
Serial1.println("AT+CWJAP=\"zhu\",\"12345678\"");
delay(10000);
    if(Serial1.find("OK"))   //接收指令正常则返回OK
    {
      Serial.println("wifi: OK");
    }
Serial1.println("AT+CIPMUX=0");
delay(2000);
Serial1.println("AT+CIPSTART=\"TCP\",\"192.168.10.24\",8080");
delay(10000);
Serial1.println("AT+CIPSEND=20");
delay(2000);
Serial1.println("hello world1234567890");
}
void loop()
{
}
执行结果



第五步 开发板+ESP8266+网络调试助手+DHT11
在上一课的基础上,加上温湿度测量并发送到网络调试助手
这一步成功标志着完成小目标有希望了
#include <stdlib.h>
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 8
void setup() {
Serial.begin(115200);
Serial1.begin(115200);
Serial1.println("AT");      //指令测试
    delay(2000);
    if(Serial1.find("OK"))   //接收指令正常则返回OK
    {
      Serial.println("esp8266: OK");
    }
Serial1.println("AT+CWMODE=1");
delay(2000);
Serial1.println("AT+RST");
delay(5000);
Serial1.println("AT+CWJAP=\"zhuhai\",\"etsankyu\"");
delay(10000);
    if(Serial1.find("OK"))   //接收指令正常则返回OK
    {
      Serial.println("wifi: OK");
    }
Serial1.println("AT+CIPMUX=0");
delay(2000);
Serial1.println("AT+CIPSTART=\"TCP\",\"192.168.10.24\",8080");
delay(10000);
}
void loop()
{
int chk = DHT11.read(DHT11PIN);
Serial1.print("Read sensor: ");
switch (chk)
{// 获取测量数据
    case DHTLIB_OK:
    Serial.println("DHT11 OK");
    break;
    case DHTLIB_ERROR_CHECKSUM:
    Serial.println("Checksum error");
    break;
    case DHTLIB_ERROR_TIMEOUT:
    Serial.println("Time out error");
    break;
    default:
    Serial.println("Unknown error");
    break;
}
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (°C): ");
Serial.println((float)DHT11.temperature, 2);
String sendstr ="Humidity (%): ";
sendstr += (float)DHT11.humidity, 2;
sendstr +="Temperature: ";
sendstr +=(float)DHT11.temperature, 2;
Serial1.print("AT+CIPSEND=");
Serial1.println(sendstr.length());
delay(5000);
Serial1.println(sendstr);
Serial.print("AT+CIPSEND=");
Serial.println(sendstr.length());
Serial.println(sendstr);
   delay(5000);
}


下一步要找个能提供TCP服务的服务器,要免费的

学习到这儿要感谢以下二位文选的作者的无私奉献和其它无数的网上发贴共享技术的网友们
参考文选(感谢作者的无私奉献):
1)ESP8266使用详解(AT,LUA,SDK)
http://www.cnblogs.com/yangfengwu/p/5205570.html
2)Arduino+ESP8266WIFI(1)
https://blog.csdn.net/wuyanmin1995/article/details/74352155

hupeilins 发表于 2019-4-16 17:56

楼主serial1是什么东西??

lun8418 发表于 2019-4-17 04:24

楼主,有没有关于PMS5003用esp8266上传的方法??
页: [1]
查看完整版本: 我的Arduino之路-实现物联网应用(2)