【STM32】基于物联网的远程温湿度监测系统 |
您所在的位置:网站首页 › 土壤温湿度检测代码 › 【STM32】基于物联网的远程温湿度监测系统 |
【STM32】基于物联网的远程温湿度监测系统 --- ESP8266 + 机智云
一、ESP-8266 烧录固件二、机智云创建产品三、手机端安装机智云 APP四、编写 DHT11 驱动五、机智云工程代码移植六、采集数据的上发七、控制数据的下拉八、ESP-8266 配置入网九、测试
工程和 pcd 的链接放这里啦 链接:https://pan.baidu.com/s/1r3gKC3R_hFLWiIE3UTO_ow?pwd=fpuc 提取码:fpuc 一、ESP-8266 烧录固件相关调试资料:ESP8266 AT 指令集 机智云固件 GAgent 下载地址链接 选择 conbine(四合一的文件) 地址链接 注意: 下载时GPIO0要接地 按下图所示进行配置,配置完成后,点击START,稍等片刻即可。 至此,机智云固件已烧录完成。 当使用 USB-TTL 连接 ESP8266 后,可以发现 ESP8266 的蓝灯闪烁与之前相比更为频繁,且串口会一直打印以下数据。 地址链接 创建产品下面的步骤可以参考:开发向导,这个很详细。 添加数据点产品开发的第一步是定义产品的功能,一个数据点可以定义为产品的某个功能,如开关等。 有关 DHT11 的相关参数信息可以参考:链接 温度: 湿度: 按键布尔值: 选择相应的 MCU,这里我选择的是 STM32F103C8T6。 Product Secret(产品密钥) 可以在产品的基本信息中找到,如下图。 完成以上步骤,即完成了产品的配置。 三、手机端安装机智云 APP地址链接 扫码下载即可。 DHT11 器件采用简化的单总线通信,DATA 引脚用于微处理器与 DHT11 之间的通讯和同步,一次传送 40 位数据,高位先出。 数据格式如下: 8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位 (其中温、湿度小数部分为 0。) 8bit 校验位 = 8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据举例: 用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,信号发送如图所示。 注意: 主机(MCU)从 DHT11 读取的温湿度数据总是前一次的测量值。 总线空闲:DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平,此时 DHT11 的DATA 引脚处于输入状态,时刻检测外部信号。 MCU 发出请求信号:MCU I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms,然后MCU I/O设置为输入状态。由于上拉电阻,MCU I/O 即 DHT11 的 DATA 数据线也随之变高,之后等待 DHT11 作出回答信号。 DHT11 发出应答信号:当 DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后 DHT11 的 DATA引脚处于输出状态,输出 80us的低电平作为应答信号,紧接着输出 80us 的高电平通知 MCU 准备接收数据,MCU I/O 此时处于输入状态,检测到 DHT11 回应信号后,等待 80us 的高电平后的数据接收。 由 DHT11 的 DATA 引脚输出 40 位数据,MCU 根据 I/O 电平的变化来判断是 “0” 还是 “1” 。 位数据 “0” 的格式为: 50us 的低电平和 26-28us的高电平。 位数据 “1” 的格式为: 50us 的低电平加 70us 的高电平。 DHT11 的 DATA 引脚输出 40 位数据后,继续输出低电平 50us 后转为输入状态,由于上拉电阻存在,变为高电平。 // 本驱动采用 HAL 库,us 级延时使用通用定时器实现,对 IO 引脚的状态的改变采用位操作以及直接寄存器操作 // 复位DHT11 void DHT11_Rst(void) { DHT11_IO_OUT(); //设置为输出 DHT11_DQ_OUT = 0; //拉低 HAL_Delay_ms(20); //拉低至少18ms DHT11_DQ_OUT = 1; //拉高 HAL_Delay_us(30); //主机拉高20~40us } //等待DHT11的回应 //返回1:未检测到DHT11的存在 //返回0:存在 uint8_t DHT11_Check(void) { uint8_t retry = 0; DHT11_IO_IN(); //设置为输入 while(DHT11_DQ_IN && retry = 100) return 1; else retry = 0; while(!DHT11_DQ_IN && retry = 100) return 1; return 0; } //从DHT11读取一个位 //返回值:1/0 uint8_t DHT11_Read_Bit(void) { uint8_t retry = 0; while(DHT11_DQ_IN && retry |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |