一、准备工作
1.准备一块正点原子STM32f103ZE精英开发板
2.在某宝上购买好正点原子的ATK-ESP8266 WIFI串口模块
3.顺便买好DH11温湿度传感器
4.别忘了ATK-USB-UART模块
用于单片机烧录使用,电脑上需安装CH340驱动程序
·注意:烧录需要使用USB-UART模块与wifi模块连接;开始烧录的时候它会要求你给WIFI模块复位,如设备无自动复位,只需要使RST接一下低电平触发即可,IO-0需置低电平
5.烧录安信可固件
通过flash下载工具ESPFlashDownloadTool烧录固件
二、实现流程
1.AT指令
1.通过串口发送AT+CWMODE=1进入STA模式 2.通过串口发送AT+CWLAP查询可用热点(路由),并找到ssid(路由/热点名字) 3.串口答复: WIFI CONNECTEDWIFI GOT IP OK 表示成功
font >
具体操作流程:
一、设置8266工作模式
8266一共有三种工作模式,分别为AP、STA、AP+STA,我们通过AT+CWMODE=x(x=1,2,3)指令进行模式的选择。当x为1时为STA模式,为2时为AP模式,3为AP+STA模式
STA模式(Station):相当于终端,连接其他路由器,不能被其他是设备连接 (=没有热点功能的手机)
AP模式(Access Point):提供无线接入服务,允许其他无线设备接入,模块自己就不能连接其他的路由器。(=路由器)
二、连接WIFI热点
AT+CWJAP=“WIFI名”,“WIFI密码”
补充:查询ESP8266所连的路由器网络:AT+CWJAP?
三、建立TCP连接->透传
AT+CIPMUX=x,(x=0或1)
AT+CIPSTART=“TCP”,“这里输入ip地址”,这里输入端口号
前一个指令用来设置TCP的连接模式,0为单连接,1为多连接。
AT+CIPMODE=x(x=0或1),0为普通模式,1为透传模式
这里设置AT指令
AT+CIPMUX=0 , TCP为单连接
AT+CIPMODE=1 , 1为透传模式
AT+CIPSTART=“TCP”,“10.158.121.192”,8086 设置了8266为TCP单连接模式,并与ip地址为10.158.121.192,端口号为8086建立了TCP连接
AT+CIPSEND , 开始透传
退出透传模式的指令+++时,不发送回车换行(串口调试助手发送的话,不勾选“发送新行”)。
四、 通过网络调试助手查看TCP连接情况:
2.接入乐联网平台
1.基于以上操作,我们就开始接入乐联网平台吧
串口输入以下指令,等待回应ack:ok 即可
2.打开keil,在esp8266.c 中输入以下代码,实现http报文发送:
#include "esp8266.h"
#include "sys.h"
#include "common.h"
#include "usart3.h"
void esp8266Init() {
//检测wifi模块是否能回复指令
printf("1.AT\r\n");
while(atk_8266_send_cmd("AT","OK",20)) {
}
delay_ms(500);
//关闭wifi自动连接
printf("2. CWAUTOCONN\r\n");
while(atk_8266_send_cmd("AT+CWAUTOCONN=0","OK",20)) {
}
delay_ms(500);
//配置wifi模式 AT+CWMODE=1为sta模式
printf("3. CWMODE\r\n");
while(atk_8266_send_cmd("AT+CWMODE=1","OK",20)) {
}
delay_ms(500);
printf("4. CWJAP\r\n");
//连接网络
while(atk_8266_send_cmd(ESP8266_WIFI_INFO,"OK",1000)) {
}
delay_ms(1000);
//开启单连接模式,因为透传必须开启单连接模式
printf("5. CIPMUX\r\n");
while(atk_8266_send_cmd("AT+CIPMUX=0","OK",20)) {
}
delay_ms(500);
//开启透传模式
printf("6. CIPMODE\r\n");
while(atk_8266_send_cmd("AT+CIPMODE=1","OK",20)) {
}
delay_ms(500);
//建立TCP连接
printf("7. CIPSTART\r\n");
while(atk_8266_send_cmd(ESP8266_LLW_INFO,"OK",50)) {
}
delay_ms(500);
//进入透传模式
printf("7. CIPSEND\r\n");
while(atk_8266_send_cmd("AT+CIPSEND","OK",20)) {
}
delay_ms(500);
printf("ESP8266Init ok");
}
void LLW_send(u8 value1,u8 value2)
{
//这里的temp和wet是自己在乐联网上设置的名称
//下面是http协议的一些格式,一定要注意有些地方是有空格的
char p[100]="";
char p1[100]="";
sprintf((char*)p,"[{\"Name\":\"temp\",\"Value\":%d}]\r\n",value1);
u3_printf("POST /api/V1/gateway/Updatesensors/01 HTTP/1.1\r\n");
u3_printf("userkey: 0d11f35a728e405ba72686ab3001c5ca\r\n");
u3_printf("Host: open.lewei50.com\r\n");
u3_printf("Content-Length: %d\r\n",strlen(p)-2);
u3_printf("Connection: close\r\n");
u3_printf("\r\n");
atk_8266_send_data(p,"true",20);
delay_ms(20);
sprintf((char*)p1,"[{\"Name\":\"wet\",\"Value\":%d}]\r\n",value2);
u3_printf("POST /api/V1/gateway/Updatesensors/01 HTTP/1.1\r\n");
u3_printf("userkey: 0d11f35a728e405ba72686ab3001c5ca\r\n");
u3_printf("Host: open.lewei50.com\r\n");
u3_printf("Content-Length: %d\r\n",strlen(p)-2);
u3_printf("Connection: close\r\n");
u3_printf("\r\n");
atk_8266_send_data(p1,"true",20);
}
3.创建一个乐联网账号,并且设置好所需要用的温湿度传感器
3.代码实现
main.c 如下:
/**
******************************************************************************
* FileName : main.c
* Version : v1.0
* Author : JackyFeng
* Date : 2022-01-16
* Description: ESP8266实现DHT11采集温湿度数据上传并显示在乐联网平台
* Function List:
1. ....
<version>:
<modify staff>:
<data>:
<description>: 开发板:正点原子STM32f103ZE精英开发板
2. ...
******************************************************************************
*/
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "usart3.h"
#include "common.h"
#include "dht11.h"
#include "esp8266.h"
u8 temperature;
u8 humidity;
/* -------------------------------- begin -------------------------------- */
/**
* @Name main
* @brief
* @param None
* @retval
* @author JackyFeng
* @Data 2022-01-16
* 1. ...
* <modify staff>:
* <data> :
* <description> : ESP8266实现DHT11采集温湿度数据上传并显示在乐联网平台
* 2. ...
**/
/* -------------------------------- end -------------------------------- */
int main(void)
{
u8 t=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
usart3_init(115200); //初始化串口3
KEY_Init(); //初始化按键
POINT_COLOR=RED; //设置字体为红色
esp8266Init();
while(DHT11_Init()) //DHT11初始化
{
LCD_ShowString(30,130,200,16,16,"DHT11 Error");
delay_ms(200);
LCD_Fill(30,130,239,130+16,WHITE);
delay_ms(200);
}
LCD_ShowString(30,130,200,16,16,"DHT11 OK");
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(30,150,200,16,16,"Temp: C");
LCD_ShowString(30,170,200,16,16,"Humi: %");
while(1)
{
if(t%10==0) //每100ms读取一次
{
DHT11_Read_Data(&temperature,&humidity); //读取温湿度值
LCD_ShowNum(30+40,150,temperature,2,16); //显示温度
LCD_ShowNum(30+40,170,humidity,2,16); //显示湿度
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
}
delay_ms(10000);//上传时间间隔10秒
LLW_send(temperature,humidity);//温湿度数据上传乐联网平台
}
}
keil编译后,乐联网平台显示如下:
传感器状态为蓝色即为开启成功
三、数据可视化分析
1.温度可视化折线图
2.温度可视化历史统计
3.温度可视化柱状图
4.设备监控
版权声明:本文为CSDN博主「JackyFeng722」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JackyFeng722/article/details/122528309
暂无评论