关于这个想法我也是做了接近3个月,由于一直没有找到现成的例子,加上修改端口但是看不懂原理,也是不愿意去做的,现在就展示下我这3个月的成品把
![这是onenet的效果展示]()

做到了温度和湿度 以及远程控制led的功能

注意用到的是DHT11 (温湿度传感器)和 正点原子的 atk_esp8266
具体实现看我自己做的笔记希望对大家有用

1.首先初始化两个串口,在这里我用的是串口1用来DEBUG 串口3用来与esp8266的接收和发送连接
实现方法:
串口1为正点原子的经典 usart函数 串口1中断服务程序为接收中断,将接收的数据保存在一个USART_RX_BUF[ ]数组中
串口3也是很简单的串口初始化函数 串口3中断服务程序为接收中断 将8266返回的数据保存在 esp8266_buf[ ]数组中
其中还特别写了一个函数为 void UsartPrintf(USART_TypeDef *USARTx, char *fmt,…) 可以实现选择对应的串口进行输出

2.串口初始化完后可以进行 esp8266的初始化 主要就是用串口3发送对应的AT指令过去,将返回的数据保存在esp8266_buf[ ]数组中,判断esp8266_buf[ ]
是否为OK后,逐条进行AT指令的配置
其中的指令 ESP8266_SendCmd(“AT+CWMODE=1\r\n”, “OK”)//配置成Sta模式:,sta本身并不接受无线的接入,它可以连接到AP
ESP8266_SendCmd(“AT+CWDHCP=1,1\r\n”, “OK”)//AT+CWDHCP=x,y 开启dhcp,y=0关闭,1开启,x为0时是ap,1是station, 2是二者同时
ESP8266_SendCmd(“AT+CWJAP=“hyh”,“123456789”\r\n”, “GOT IP”)// 当作为station模式时,加入热点xxx,xxx是热点SSID,yyy是热点密码
ESP8266_SendCmd(“AT+CIPSTART=“TCP”,“183.230.40.39”,6002\r\n”, “CONNECT”)//连接onenet的云地址

3.接下来则为连接 OneNet_DevLink() 且配置MQTT协议了
首先就是配置报文了用MQTT_PacketConnect()函数:
主要是将报文写入mqttPacket->_data[] 的数组中
1.固定抱头的配置 第一字节包含消息类型(Message Type)和QoS级别等标志位
2.第二字节开始是剩余长度字段,该长度是后面的可变报文头加消息负载的总长度,该字段最多允许四个字节。
3.可变头部的配置 将用户id 和鉴权信息写入
配置好报文后用 ESP8266_SendData(mqttPacket._data, mqttPacket._len); //进行发送

4.此时我们就已经完全连接到了onenet云平台且用的是MQTT协议 具体我们传输数据用的也都是MQTT的报文格式,接受onenet下放的命令后进行处理
将我们保存好的数据传上云端 用OneNet_SendData(); //上传温湿度数据到onenet
同时我们还是要配置好报文,抱头告知为上传数据,然后在将数据逐一加入到mqttPacket._data[ ]中
用ESP8266_SendData(mqttPacket._data, mqttPacket._len); //进行发送
onenet会通过我们的抱头来知道我们是进行连接还是传送数据,这些抱头的设置都是需要我们用函数来进行配置的

5.接下来就到了处理onenet下发的指令了,每次我们发送数据上去后,onenet都会返回一个无关紧要的命令,我们可以忽略
但如果我们想在onenet上下发指令控制led或者其他外设,我们就需要
首先判断是否有指令下发
判断是否为有效命令,后将其解包(因为onenet也是通过MQTT协议发送数据,我们需要将其的抱头和数据分解出来)
将其解包后在与我们预先设点的指令对比看是否一样,后执行对应的代码

6.重复执行4,5 不过同时也要刷新自己本身的数据好防止上传的数据是正确的

如果需要移至到了你的开发板上就需要改写wife账号和密码 还有你的云平台设备id 和 鉴权信息了
希望能帮到大家