esp8266 at接收数据中断时间_A project based on STM32 & ESP8266

emmmm, 经过多日的学习探索+尝试,算是完成了一个勉强算得上的小项目。

硬件:

STM32F103C8T6(标准库) 、ESP8266(non-OS SDK) 、串口屏(陶晶弛)、 DHT11、OLED(iic)

功能:

STM32采集DHT11的温湿度数据,并将温湿度数据发送给串口屏与ESP8266。
串口屏显示实时温湿度数据及曲线图。8266则会连接WiFi并连接到百度天工平台,然后将串口接收的数据上传到百度天工平台。
同时在百度天工平台创建了简单的温湿度仪表盘,将温湿度数据可视化。(有网的地方都可查看实时的温湿度数据)

Main:

把个人看来比较重要的几个部分拿出来说一说。这篇文章一方面希望可以帮助和我差不多的小白少走点弯路,一方面就想记录记录经过多日学习调试的成果!
废话少说! 开始吧。

ESP8266 non-OS SDK 串口接收

想要处理串口接收的数据,只需找到uart.c 下的【uart_recvTask】函数。我们需要做的只是【新建一个缓存数组、将接收的数据赋值给临时数组、处理接收数据】。

8266接收数据说明:8266接收到的数据以一个字节为基本单位。(STM32也如此) [一个字节]----[0~255]----[0x00~0xFF]

举个例子:

以下方串口结束数据处理程序为例
stm32发送给8266的数据为 “DATAXXXX”,会被保存到【cache[]】中 DATA --- 设置的数据标识
8266会判断接收到的一串数据 前四个字节是否为DATA, 如果是则表明该串数据为STM32发送的温湿度数据。 XXXX --- 四个字节的温湿度数据
一个温度数据 =【整数部分+小数部分】
第一个字节代表整数部分,第二个字节代表小数部分。
//串口使用uart0   (uart1只能发送)
//串口接收处理只需在如下【uart_recvTask】函数中缓存接收数据,并处理接收数据。

#include "mqtt_config.h"  //暂时不用管他是啥
LOCAL void ICACHE_FLASH_ATTR 
uart_recvTask(os_event_t *events)
{
    if(events->sig == 0){
    #if  UART_BUFF_EN  
        Uart_rx_buff_enq();
    #else
        // 1.从先进先出通道 FIFO 读取接收到的数据长度
        uint8 fifo_len = (READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
        uint8 d_tmp = 0;
        uint8 idx=0;
        //char temp[1];
        // 2.定义一个临时接收的数据区
        char cache[fifo_len];//新建一个缓存数组
        // 3. 赋值给临时数组
        for(idx=0;idxsig == 1){
    #if UART_BUFF_EN
     //already move uart buffer output to uart empty interrupt
        //tx_start_uart_buffer(UART0);
    #else 
    
    #endif
    }
}

STM32 串口发送

【发送的第一个字符丢失】

使用stm32串口发送数据时,很可能会出现【发送的第一个字符丢失】的现象。在调试串口屏,给串口屏发送“add 1,0,50”时,实际发送的结果却是“dd 1,0,50”

具体原因咱也不太懂,下面是解决方案之一。(刚开始,我没太在意这个bug,直接发送的“aadd 1,0,50”... ...) 绝大多数时间都耗费在串口调试上了,一定要多使用串口助手。

esp8266 at接收数据中断时间_A project based on STM32 & ESP8266_第1张图片

【发送的温湿度数据有误】

stm32通过串口发送温湿度数据的整数部分、小数部分给8266时,很可能出现【8266接收的数据完全不对。】

假设温度数据为 u8 buffer[2]={25,7};
通过 %d%d发送,则8266接收到的数据为 “257”,三个字节。
如此而言,对应的温湿度数据也就乱套了。
通过 %c%c发送,接收的数据为 '25'、'7' 两个字节。

esp8266 at接收数据中断时间_A project based on STM32 & ESP8266_第2张图片

展示:

视频是暂时不可能有了,放几张照片。

63658052bd9c70066f16a33320a3c37d.png
嘻嘻嘻

整体布局

esp8266 at接收数据中断时间_A project based on STM32 & ESP8266_第3张图片
emmm,线很乱,将就看。 emmm,线很乱,将就看。

STM32最小系统:

使用两个串口,分别和8266、串口屏进行通讯。其中PB11连接温湿度传感器DHT11的DATA脚。由于DHT11属于低速传感器,两次通信请求时间间隔不能太短,一般而言不能低于1s。STM32的程序中使用1s定时中断进行数据的读取与发送。

PB11——DATA(DHT11)
USART1——ESP8266
USART2——串口屏

esp8266 at接收数据中断时间_A project based on STM32 & ESP8266_第4张图片

串口触摸屏:

串口触摸屏用于将温湿度数据以曲线图方式显示。图中蓝色曲线为湿度,红色曲线为温度。第一个曲线图用于温湿度数据的显示,第二个曲线图是显示字母的(“HAPPY B-DAY”)

第二个曲线图只是个人弄着玩儿的。

esp8266 at接收数据中断时间_A project based on STM32 & ESP8266_第5张图片

OLED屏

该OLED屏由ESP8266驱动,SDK工程中使用模拟IIC驱动8266。该oled屏幕的作用是提示8266的状态:是否连接WIFI、是否连接上MQTT服务器。

GPIO2(D4) —— SDA GPIO14(D5) —— SCL

esp8266 at接收数据中断时间_A project based on STM32 & ESP8266_第6张图片

百度天工可视化

emmm,百度天工物联网平台比较好接入,但是他的可视化界面感觉不太舒服。里面的时序图控件琢磨好久没学会怎么用。(似乎得使用百度天工自研的时序数据库)Poao_home

esp8266 at接收数据中断时间_A project based on STM32 & ESP8266_第7张图片

文档:

emmm,这个文档包含STM32F103C8T6工程文件、ESP8266 demo、串口屏配置文件。也是耗费了许多精力而编写好的,暂时先放这里了。有时间再仔细说明一些关键的内容。(从最初的ESP8266 sdk学习到现在,也差不多接近一个月了...)

还是那句老话,有基础的先自行研究,里面有用Typora写的详细说明文档!!

网上别人的8266串口接收处理数据的demo都是收费的!!!

8266_STM32_UART.zip
13.6M
·
百度网盘

你可能感兴趣的:(esp8266,at接收数据中断时间)