正点原子STM32f103ZE精英开发板实现基于ESP8266 WIFI模块温湿度数据上传至乐联网平台


一、准备工作

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

生成海报
点赞 0

JackyFeng722

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

ESP32-GY_30光照强度传感器

GY_30光照强度传感器介绍 GY-30光强传感器特点及使用介绍 一、连接引脚 GY_30光照强度传感器使用I2C传输数据 。 5根引脚,名称与功能如下; vcc 为外接供电电源输入端 GND 地线 SCL I2C通信模式时钟

初学STM32之串口通信

一、背景知识 1. 处理器与外部通信的两种方式 并行通信:数据各个位同时传输 优点速度快;缺点占用引脚资源多串行通信:数据按位顺序传输 优点占用引脚资源少;缺点速度慢 2.串行通信的

GPIO口详解、HAL库操作按键

本次博客知识来自于韦东山老师的7天物联网课程。 一、GPIO详解 1、STM32F103C8T6一共有48个引脚。 2、按A、B、C分组,每组16个引脚,编号为0~15,STM32F103C8T6