ESP8266上传传感器数据到远端与远端反向控制终端--Arduino
上传传感器数据到远端与远端反向控制终端
- 功能
- 硬件连接
- 程序
- 后续
功能
集上传传感器数据到远端与远端反向控制终端
本例采用TCP协议,通过WiFi透传模式进行远端控制与传输。采用读取DHT11温湿度采集模块采集到的数据发送到远端(平台)、远端控制LED灯和蜂鸣器演示远端控制
功能说明:上电后,DHT11温湿度传感器不断获取周围的温湿度等状态值并把数据发送到物联网数据平台,在平台上通过反向控制的方式控制LED灯的亮灭和蜂鸣器的开闭,可在串口看到相关响应;
硬件连接
DHT11温湿度传感器–D4
LED灯–D5
有源蜂鸣器–D12
程序
#include <ESP8266WiFi.h>#define u8 unsigned char
//IO方向设置
#define DHT11_IO_IN() pinMode(4, INPUT)
#define DHT11_IO_OUT() pinMode(4, OUTPUT)
IO操作函数
#define DHT11_DQ_OUT 4 //数据端口 4
#define DHT11_DQ_IN 4 //数据端口 4//LED
#define led 5
//Beep
#define beep 12//所连接的WiFi热点账密
const char* ssid = "Doit";
const char* password = "doit3305";//数据接收的网络平台
const char* host = "iot.doit.am";//物联网平台
//const char* host = "diot.doit.am";
const int httpPort = 8810;
//登录平台的 用户名 与 秘钥Key (随机数)
const char* streamId = "lin";
const char* privateKey = "dee5d879314b54dca7813364ff94b79a";char str[512];//接收数据缓冲区
WiFiClient client;// 使用WiFi客户端类创建TCP连接
//反向控制:
unsigned long MS_TIMER = 0;
unsigned long lastMSTimer = 0;
String comdata = "";
char flag = false;/*******************************DHT11协议****************************************/
u8 temperature;
u8 humidity;
u8 t = 0;
//复位DHT11
void DHT11_Rst(void)
{DHT11_IO_OUT(); //SET OUTPUTdigitalWrite(DHT11_DQ_OUT, LOW); //拉低DQdelay(20); //拉低至少18msdigitalWrite(DHT11_DQ_OUT, HIGH); //DQ=1delayMicroseconds(30); //主机拉高20~40us
}
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)
{u8 retry = 0;DHT11_IO_IN();//SET INPUTwhile (digitalRead(DHT11_DQ_IN) && retry < 100) //DHT11会拉低40~80us{retry++;delayMicroseconds(1);};if (retry >= 100)return 1;else retry = 0;while (!digitalRead(DHT11_DQ_IN) && retry < 100) //DHT11拉低后会再次拉高40~80us{retry++;delayMicroseconds(1);};if (retry >= 100)return 1;return 0;
}
//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void)
{u8 retry = 0;while (digitalRead(DHT11_DQ_IN) && retry < 100) //等待变为低电平{retry++;delayMicroseconds(1);}retry = 0;while (!digitalRead(DHT11_DQ_IN) && retry < 100) //等待变高电平{retry++;delayMicroseconds(1);}delayMicroseconds(40);//等待40usif (digitalRead(DHT11_DQ_IN))return 1;else return 0;
}
//从DHT11读取一个字节
//返回值:读到的数据
u8 DHT11_Read_Byte(void)
{u8 i, dat;dat = 0;for (i = 0; i < 8; i++){dat <<= 1;dat |= DHT11_Read_Bit();}return dat;
}
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp, u8 *humi)
{u8 buf[5];u8 i;DHT11_Rst();if (DHT11_Check() == 0){for (i = 0; i < 5; i++) //读取40位数据{buf[i] = DHT11_Read_Byte();}if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]){*humi = buf[0];*temp = buf[2];}} else return 1;return 0;
}
//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在
u8 DHT11_Init(void)
{pinMode(4, OUTPUT);DHT11_Rst();return DHT11_Check();
}
/********************************************************************///各种传感器的初始化
void sensor_init()
{//LED灯pinMode(led, OUTPUT);digitalWrite(led, LOW);//蜂鸣器pinMode(beep, OUTPUT);digitalWrite(beep, HIGH);
}void setup()
{Serial.begin(115200);sensor_init();MS_TIMER = millis();//DHT11delay(10);if (DHT11_Init()) //DHT11初始化{Serial.println("DHT11 Error");delay(200);}Serial.println("DHT11 OK");// wifi_station_set_auto_connect(0);//关闭自动连接WiFi.disconnect();/// 首先,我们连接到WiFi网络Serial.println();Serial.println();Serial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());delay(50);Serial.print("connecting to ");Serial.println(host);// 使用WiFi客户端类创建TCP连接// WiFiClient client;if (!client.connect(host, httpPort)){Serial.println("connection failed");return;}
}
unsigned long lastTick = 0;
void loop()
{if (flag == false){if (millis() - MS_TIMER > 5000){MS_TIMER = millis();}}//读传感器并发送//5s读一次if (millis() - lastTick > 5000){lastTick = millis();static bool first_flag = true;if (first_flag){first_flag = false;sprintf(str, "cmd=subscribe&topic=lin\r\n");//注册用户名,以让后面的反向控制得以是实现client.print(str);return;}//读传感器并发送DHT11_Read_Data(&temperature, &humidity); //读取温湿度值Serial.print(" Temp:");Serial.print(temperature);Serial.print("'C");Serial.print(" Humi:");Serial.print(humidity);Serial.println("%");sprintf(str, "cmd=upload&device_name=arduino1&data=%d&device_name=arduino&data=%d&uid=lin&key=%s\r\n", humidity, temperature, privateKey);client.print(str);}if (client.available()){//读并处理// R读取服务器的应答的所有行,并把它们打印到串口String recDataStr = client.readStringUntil('\n');Serial.println(recDataStr);//方向控制:注意LED灯是在设备arduino那里控制,蜂鸣器是在设备arduino1那里控制if (recDataStr.compareTo("cmd=publish&device_name=arduino&device_cmd=ledon\r") == 0){digitalWrite(led, HIGH);Serial.println("LED is being open !");}else if (recDataStr.compareTo("cmd=publish&device_name=arduino&device_cmd=ledoff\r") == 0){digitalWrite(led, LOW);Serial.println("LED has been closed !");}else if (recDataStr.compareTo("cmd=publish&device_name=arduino1&device_cmd=beepon\r") == 0){digitalWrite(beep, HIGH);Serial.println("Beep is being open !");}else if (recDataStr.compareTo("cmd=publish&device_name=arduino1&device_cmd=beepoff\r") == 0){digitalWrite(beep, LOW);Serial.println("Beep has been closed !");}}
}
后续
如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。
欢迎关注公众号。
编写不易,感谢支持。
ESP8266上传传感器数据到远端与远端反向控制终端--Arduino相关推荐
- ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据
暂时放个程序 //ME->>{"method": "update","gatewayNo": "01",&q ...
- ESP8266上传DHT11数据给私人javaweb服务器实现网页查询数据的电路方案
系列文章目录 第一章ESP8266的java软件仿真测试 第二章ESP8266硬件与软件测试 第三章ESP8266客户端与Java后台服务器联调 第四章ESP8266客户端与JavaWeb服务器联调 ...
- 新大陆物联网-Android实现网关功能-连接云平台并上传传感器数据-获取执行器指令并执行-Android网关开发-通信-数据上传云平台-JAVA原理讲解-免费云平台使用-竞赛2022国赛真题
目录 一.任务要求 二.开发环境 三.网关上线 四.数据上传与命令下发 五.JSON命令解析思路 六.总结 一.任务要求 我们将要实现的效果是:Android开发平板与Lora板进行有线串口通信,解析 ...
- 小程序空显示undefined_微信小程序显示ESP8266上传的实时显示温湿度数据
第一.原理讲解 原理简述:利用发布订阅模式.第一步,先读取DHT11温湿度数值,第二步,新建主题,然后esp8266往这个主题发送消息,第三步.小程序通过http API接口获取数据.小程序控制原理: ...
- 上传GPS数据到ONENET云平台
本文是对已经了解怎么去上传单个数据流但不知道怎么同时上传多个数据流的的读者,若还不了解怎么上传单个数据流请跳过本文. 使用MQTT Simulate Device 进行模拟配置(在没有实体设备或者不 ...
- 【stm32c8t6+esp8266上传温湿度到Onenet云平台】
stm32c8t6+esp8266上传温湿度到Onenet云平台 最近做的一个小项目中需要将获取的数据到云平台,我选择的是onenet平台,下面会根据个人学习过程分享如何使用onenet平台以及如何通 ...
- 天问51单片机结合WIFI模块上传温度数据到巴法云平台
目 录 一.前言 二.项目准备 三.设计思路 四.项目主要代码 五.项目成果 六.项目不足 一.前言: 继前一个项目<天问51单片机结合WIFI模块上传温度数据到TCP服务器>,本次项目是 ...
- 分享三个例程:使用ESP32做一个实时语音对讲机,MQTT协议实现公网对讲,ESP32-CAM 上传图像数据到网络。并附上例程链接。
分享三个例程:使用ESP32做一个实时语音对讲机,MQTT协议实现公网对讲,ESP32-CAM 上传图像数据到网络.并附上例程链接.可以比对着看来学习NOW,MQTT使用方法.想办法把图像和语音代码融 ...
- 上接稳扎稳打Silverlight(20) - 2.0通信之WebClient, 以字符串的形式上传/下载数据
2.以字符串的形式和流的形式上传数据 REST.cs(WCF创建的用于演示以字符串的形式和流的形式上传数据的REST服务) using System; using System.Linq; usi ...
最新文章
- 分离内核和虚拟机支持安全的关键任务边缘计算
- 计算机网络工程应用,计算机网络工程网络命令的应用
- oracle数据磊导入数据,可传输表空间记载
- VueRouter的安装以及基本使用
- 如何改造UE4用于赛璐璐3D卡渲?这里有一份日本大厂的实操分享
- 2.两数相加 golang
- html定义盒子距离顶底端像素,css - 盒子内外边距
- Angr安装与使用之使用篇(二)
- TFWmodi-修改tfw文件
- ios 编译ffmpeg 支持 x264 fdk-aac openssl 并裁剪库大小
- vsphere服务器虚拟化的优点,vmware虚拟化优势_vmware开启虚拟化
- 访谈:Joel Spolsky谈开发人员角色的变化
- 5分绩点转4分_搞笑图片集:这才是4个兄弟分5块饼的正确答案吧
- 爪哇国新游记之三十三----目录文件操作
- 贷中存量客户的价值挖掘与分类实现,试试这一重要的场景模型
- chrome模拟手机浏览器方法
- 【Unet系列】(三)Unet++网络
- win xp和 win7 的集成版 和 安装方法
- Unity Android(七) Unity Android10读写权限
- 开课吧项目的总结以及读《图解HTTP》的总结