你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【F769IDISCOVERY评测】ESP8266简单上手  

[复制链接]
creep 提问时间:2016-12-14 22:52 /
           最近看到很多社区论坛大神用ESP8266配合STM32F769 Discovery(STM32官网)做了很多高端的应用,想起我也有一个闲置好久的ESP8266模块,决定重新找出来折腾折腾。高端的应用我不会搞就弄个简单的上手程序给需要的做个参考。


    STM32F32769 Discovery上有个ESP8266 串口WIFI模块的扩展接口,如果有模块的话直接装上即可使用,省了不少用杜邦线连接模块到开发板的板麻烦。我找了下丢在一边好久没用的ESP8266 吹吹灰然后插到板子上,看到熟悉的蓝灯闪烁几下灭掉红灯常亮应该问题不大可以继续战斗。


    常见的串口WIFI模块在进入数据透传模式之前都会包含很多的AT命令用于设置模块、接收发送数据。如果是第一次接触最好的找个WIFI模块的评估开发板而不是一个单独的WIFI模块.一般的WIFI模块评估板上面都会有一个USB转串口用于测试熟悉各种的AT命令,等彻底了解了各种AT命令以及发送接收数据的设置后再在程序固化WIFI的初始化设置用的AT命令序列。比较幸运是ST官方的Discovery、Nucleo 开发板上都会有一个带虚拟串口的STLink,可以借助这个虚拟串口方便的进行AT命令测试,WIFI模块接收发送数据测试,这样在前期的测试中我们可以借助这个虚拟串口做一个类似中转的作用,不需要在程序中写任何的AT命令就可以测试所的模块的命令和数据收发。


1、虚拟串口中转数据

STM32F32769 Discovery 上的ESP8266扩展接口和MCU的UART5 相连,stlink的虚拟串口和MCU的USART1 相连,由于AT命令的收发都是不定长的数据,我们可以参考上一个帖子中超时中断+DMA的模式来设置USART1\UART5同时打开超时中断和DMA收发。这样做之后我们就可以直接在电脑上同过串口助手借助stlink的虚拟串口进行ESP8266的各种AT命令测试了。

stlink的虚拟串口超时中断的回调函数如下:

  1. <font size="3" face="Tahoma">void UART_ReceiverTimeOut_Callback(UART_HandleTypeDef *huart)
  2. {
  3.     uint16_t len;
  4.     uint32_t tmp1 = 0;
  5.     tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF);
  6.     if((tmp1 != RESET))
  7.     {
  8.         __HAL_UART_CLEAR_IT(huart, UART_CLEAR_RTOF);
  9.         /* set uart state  ready*/
  10.         huart->RxState = HAL_UART_STATE_READY;
  11.         /* Disable the rx  DMA peripheral */
  12.         __HAL_DMA_DISABLE(huart->hdmarx);
  13.         /*Clear the DMA Stream pending flags.*/
  14.         __HAL_DMA_CLEAR_FLAG(huart->hdmarx, __HAL_DMA_GET_TC_FLAG_INDEX(huart->hdmarx));
  15.         /* get rx data len */
  16.         len = huart->hdmarx->Instance->NDTR;
  17.         U1_Rxlen = RXBUFFLENGTH - len;
  18.         /* Process Unlocked */
  19.         __HAL_UNLOCK(huart->hdmarx);
  20.         
  21.        huart->hdmarx->State = HAL_DMA_STATE_READY;

  22.        HAL_UART_Receive_DMA(huart, U1_RxBuff, RXBUFFLENGTH);
  23.                          WIFI_CMD_Received_Sta = ENABLE;
  24.     }
  25. }
  26. </font>
复制代码
ESP8266超时中断回调函数如下:
  1. <font size="3" face="Tahoma">void WIFI_ReceiverTimeOut_Callback(UART_HandleTypeDef *huart)
  2. {
  3.     uint16_t len;
  4.     uint32_t tmp1 = 0;
  5.     tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF);
  6.     if((tmp1 != RESET))
  7.     {
  8.         __HAL_UART_CLEAR_IT(huart, UART_CLEAR_RTOF);
  9.         /* set uart state  ready*/
  10.         huart->RxState = HAL_UART_STATE_READY;
  11.         /* Disable the rx  DMA peripheral */
  12.         __HAL_DMA_DISABLE(huart->hdmarx);
  13.         /*Clear the DMA Stream pending flags.*/
  14.         __HAL_DMA_CLEAR_FLAG(huart->hdmarx, __HAL_DMA_GET_TC_FLAG_INDEX(huart->hdmarx));
  15.         /* get rx data len */
  16.         len = huart->hdmarx->Instance->NDTR;
  17.         WIFI_Rxlen = RXBUFFLENGTH - len;
  18.         /* Process Unlocked */
  19.         __HAL_UNLOCK(huart->hdmarx);
  20.         
  21.        huart->hdmarx->State = HAL_DMA_STATE_READY;

  22.       HAL_UART_Receive_DMA(huart, WIFI_RxBuff, RXBUFFLENGTH);
  23.                         WIFI_CMD_Response_Sta = ENABLE;
  24.     }
  25. }</font>
复制代码
在mian函数中实现stlink虚拟串口的中转:
  1. <font size="3" face="Tahoma">int main(void)
  2. {
  3.   CPU_CACHE_Enable();
  4.   HAL_Init();
  5.   SystemClock_Config();
  6.   USART1_Init();
  7.   My_ESP8266_Init();
  8.   while (1)
  9.   {
  10.                 //发送接收的esp8266模块响应到stlink的虚拟串口
  11.                 if(WIFI_CMD_Response_Sta && WIFI_Rxlen)
  12.                 {
  13.                                 HAL_UART_Transmit_DMA(&UartHandle, WIFI_RxBuff, WIFI_Rxlen);
  14.                                 WIFI_CMD_Response_Sta = DISABLE;
  15.                                 WIFI_Rxlen = 0;
  16.                 }
  17.                 //发送接收到的stlink虚拟串口数据esp8266模块
  18.                 if(WIFI_CMD_Received_Sta && U1_Rxlen)
  19.                 {
  20.                         HAL_UART_Transmit_DMA(&WiFiUartHandle,U1_RxBuff,U1_Rxlen);
  21.                         WIFI_CMD_Received_Sta = DISABLE;
  22.                         U1_Rxlen = 0;
  23.                 }
  24.   }
  25. }</font>
复制代码
通过上面的设置我们就可以用串口助手完全控制ESP8266模块了。

2、AT命令测试

我们先用AT命令看下ESP8266的版本信息和复位命令

AT11.gif

然后查看下模块的工作模式和连接到路由器后的IP地址

AT2.gif

3、TCP测试
  
除了测试模块的AT指令之外我们测试下TCP传输,设置模块和电脑连接同一个路由,模块发送数据到电脑的TCP Server调试软件,同时TCP Server发送数据到模块,基本的设置AT指令顺序如下:
  1. <font size="3" face="Tahoma">1.设置工作模式:3(STA+AP)
  2. AT+CWMODE=3

  3. 2.设置无线路由器的用户名和密码
  4. AT+CWJAP="ssid","password"

  5. 3.查询IP,常见的是192.168.x.x局域网IP
  6. AT+CIFSR

  7. 4.设置单链接
  8. AT+CIPMUX=0

  9. 5.设置透传模式
  10. AT+CIPMODE=1

  11. 6.连接电脑上的TCPServer,IP和端口号根据具体情况进行修改即可
  12. AT+CIPSTART="TCP","192.168.1.102",8080

  13. 7.启动透传发送
  14. AT+CIPSEND

  15. 8.发送透传数据
  16. </font>
复制代码
测试结果如下:
AT3.gif

4、UDP测试

设置AT命令如下;
  1. <font size="3" face="Tahoma">1.设置工作模式:3(STA+AP)
  2. AT+CWMODE=3

  3. 2.设置无线路由器的用户名和密码(已连接过路由请忽略)
  4. AT+CWJAP="ssid","password"

  5. 3.查询IP,常见的是192.168.x.x局域网IP
  6. AT+CIFSR

  7. 4.设置单链接
  8. AT+CIPMUX=0

  9. 5.设置透传模式
  10. AT+CIPMODE=1

  11. 6.连接电脑上的udp,IP和端口号根据具体情况进行修改即可
  12. AT+CIPSTART="UDP","192.168.1.102",8080,8899,0

  13. 7.启动透传发送
  14. AT+CIPSEND

  15. 8.发送透传数据</font>
复制代码
测试结果:
AT4.gif

除了上面的工作模式之外还有其他数据传输模块,借助于stlink的虚拟串口进行中转数据我们可以很快的熟悉AT命令和数据收发的设置。

5、ESP8266调试软件

如果感觉输入各种的AT命令麻烦可以使用ESP8266调试软件配合stlink的虚拟串口进行AT命令测试和数据收发测试

AT5.gif



测试代码:
WIFI.rar (888.92 KB, 下载次数: 83)

评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20

查看全部评分

1 收藏 8 评论26 发布时间:2016-12-14 22:52

举报

26个回答
creep 回答时间:2017-9-21 21:56:12
lijain 发表于 2017-9-14 11:07
你好,你这个udp做的很不错。不过每次连接要是换不同电脑ip变了。还的重新烧写,不是很麻烦。可以交流下? ...

IP固定写死是不方便,IP 可以做成为可以设置应该方便些。
欢迎加入社区QQ群交流讨论:427779516
creep 回答时间:2017-1-13 08:57:45
maomoa 发表于 2017-1-12 22:06
谢谢楼主,这个应用是极好的,很有启发性.

                           
creep 回答时间:2016-12-15 18:03:37
zero99 发表于 2016-12-15 15:58
橙子出品,必属精品

                 
霹雳之火 回答时间:2016-12-15 09:03:29
谢谢分享 占沙发

评分

参与人数 1ST金币 +10 收起 理由
creep + 10 Bingo !!!

查看全部评分

jackten 回答时间:2016-12-15 09:14:44
谢谢分享                     
风子 回答时间:2016-12-15 09:44:45
膜拜大神
anobodykey 回答时间:2016-12-15 10:02:26
感谢楼主分享
creep 回答时间:2016-12-15 10:23:12

              
Stm32McuLover 回答时间:2016-12-15 12:08:22
顶大神
Paderboy 回答时间:2016-12-15 12:47:30
膜拜大神
5265325 回答时间:2016-12-15 12:57:35
creep 回答时间:2016-12-15 13:40:20

感谢版主支持!
creep 回答时间:2016-12-15 13:41:14

Hello,PB !!!
zero99 回答时间:2016-12-15 15:58:18
橙子出品,必属精品
zbber 回答时间:2016-12-15 17:50:36
顶大神,楼主加油,我们都看好你哦
creep 回答时间:2016-12-15 18:04:45
zbber 发表于 2016-12-15 17:50
顶大神,楼主加油,我们都看好你哦

我们同样也看好你哦
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版