irpas技术客

【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信_普朗克小猫_esp8266wifi模块与单片机连接

网络投稿 2561

文章目录 前言一、ESP8266模块与STM32连接二、单片机代码三、总结

前言

承接上文WIFI上位机部分:【上位机】通过WIFI上位机与网络调试助手通信绘制曲线,现阶段实现了STM32单片机与ESP8266WIFI模块作为下位机与WIFI上位机通信。

一、ESP8266模块与STM32连接

ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi(串口-无线)模块,此处使用的是正点原子团队自主开发的ATK-ESP-01模块。该模块通过串口与单片机(此处使用启明欣欣的STM32F407ZGT6)进行通信,只需连接四个引脚,使用十分方便。 在与单片机使用前,建议先连接电脑,使用串口调试助手与网络调试助手进行互相通信的测试,确保WIFI模块的正常及网络的连通。参考教程:ESP8266模块使用教程 测试完毕后,可与单片机串口连接,如下所示:

二、单片机代码

对于ESP8266的使用,其本质是使用串口发送AT指令操纵模块,可参考:AT指令集,故只需熟悉基本指令,便可编写相关代码。以下是部分操作指令:

#include "esp8266.hpp" using namespace ESP8266_Space; extern "C" void MineMain(void) { char buf[339]; wifi.init(); HAL_Delay(100); //wifi.sendCmd("AT+RESTORE", "ODDK", 60000); //wifi.sendCmd("AT+CWMODE=1", "OK" , 100); //切换到STA模式 //wifi.sendCmd("AT+RST", "OK" , 100); //切换到STA模式 //HAL_Delay(60000); while(wifi.sendCmd("AT", "OK", 100) == Timeout){ wifi.quitTrans(); //退出透传 } wifi.sendCmd("ATE0" , "OK" , 100); //关闭回显 //wifi.sendCmd("AT+CWLAP", "OK" , 5000); //显示可加入的AP /* 加入wifi */ sprintf(buf,"AT+CWJAP=\"%s\",\"%s\"","dxxy16-403-1","1234567890"); wifi.sendCmd(buf, "WIFI GOT IP", 15000); //加入AP wifi.send((char*)"", "OK" , 2000); //加入AP /* 与PC机建立连接 */ sprintf(buf,"AT+CIPSTART=\"%s\",\"%s\",%s", "TCP","192.168.0.171","8086"); wifi.sendCmd(buf, "OK", 15000); /* 进入透传模式 */ //wifi.sendCmd("AT+CIPMODE=1", "OK", 200); //开启透传模式 //wifi.sendCmd("AT+CIPSEND" , ">", 100); //进入透传 for(;;){ static char messa[339] = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40|"\ "1,1,1,0.994,0.993,0.991,0.889,0.875,0.866,0.850,0.838,0.816,0.806,0.789,0.775,0.759,0.745,0.739,0.724,0.715,0.710,0.689,0.667,"\ "0.658,0.645,0.635,0.626,0.598,0.578,0.568,0.559,0.496,0.481,0.472,0.452,0.435,0.418,0.406,0.389,0.377"; sprintf(buf,"%s\r\n",messa); HAL_Delay(500); //非透传 wifi.sendCmd("AT+CIPSEND=676",">",100); //将要发送676个数据 wifi.send(buf, "SEND OK", 100); //透传模式 //wifi.sendNoAck((uint8_t *)buf); } }

这里使用了模块的STA模式,即WIFI模块作为一个客户端(Client)与WIFI上位机(Server)通信,原理与上一篇文章相似。只需要更改相应的指令,就可切换至AT或AT/STA模式,但AT模式与STA模式的使用方法稍有不同(AT模式时模块作为服务端)。我们使用一个char型数组将所要发送的消息存储起来,注意格式与上位机所规定的协议保持一致。 使用另外一个串口将单片机与电脑相连,好处是能够观察WIFI模块是否已连接且正常工作:

#include "esp8266.hpp" #include "string.h" extern DMA_HandleTypeDef hdma_usart6_rx;//使用了串口的DMA,usart6与电脑相连 CPP_UART test_uart = CPP_UART(&huart3); ESP8266 wifi = ESP8266(&huart6, &hdma_usart6_rx, &htim6); /** * @brief ESP8266 类 构造函数 * @param huart : 连接ESP8266所用到的串口 * @param dma_rx : 串口接收对应的DMA * @param htim : 用于计数是否超时的定时器 * @note huart 对应的串口配置要求正确,波特率用默认的115200(也可自己更改, * @ 但要注意ESP8266本身接收串口的速率),并且需要打开中断 * @ dma_rx 串口设置dma的接收,一次一个字节,循环模式(circle) * @ htim 不用开启定时器中断,不用关心预分频系数和自动重装载值和OnePulse模式 * @retval None **/ ESP8266::ESP8266(UART_HandleTypeDef* huart, DMA_HandleTypeDef *dma_rx, TIM_HandleTypeDef *htim) :uart(huart) { this->dma_rx = dma_rx; this->tim = htim; this->uart_state = Idle; this->mode = NOINIT; }

完整源码:ESP8266模块使用代码(基于C++) 这里可能出现的问题是可能会连接不上或者出现busy提示,此时重启一下模块并重新连接。程序烧录后执行效果如下:

三、总结

单片机数据通过串口发送给WIFI模块,WIFI模块通过无线通信方式发送至电脑上位机,实现了基本的物联网功能,此处展示的仅为一个简单的测试。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: # #ALIENTEK #推出的一款高性能的