#单片机高级 软件

整理串口通信(UART IIC SPI CAN 232 485 422等)

无线通信(WIFI 蓝牙 LORA NB-IOT ZIGBEE等)

课程介绍

单片机控制ESP8266连接TCP

1、ESP8266

官网

资源分类 | 安信可科技

简介

ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266EX的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。

模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板载天线。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。

ESP8266 是高性能无线 SoC,以最低成本提供最大实用性,为 Wi-Fi 功能嵌入其他系统提供无限可能。

技术:从设计开始——————》产品完成

产品:专用目的的集成电路

ESP32:WiFi+蓝牙

工具地址

开发工具清单 | 安信可科技

2. ESP8266开发方式

固件开发(二次开发):不需要其他单片机只用8266就可以了,写8266内程序

AT指令方式开发:需要通过串口再接一个单片机,8266和这个单片机进行串口通信,8266内有原本的固件程序,单片机串口发送指令(AT指令)控制8266

3. ESP8266的AT指令

AT指令集参考文档

ESP8266_AT指令集V2.1.0

U5开发板实物图

4. AT指令练习

1 AT+RST

配置WiFi模式

AT+CWMODE=1 //station mode

响应:OK

连接AP(路由器)

AT+CWJAP="SSID","password" //SSID and password of router

响应:OK

查询 ESP8266 设备的 IP 地址

AT+CIFSR

响应:

+CIFSR:APIP,"192.168.4.1"

+CIFSR:APMAC,"82:64:6f:a8:75:e0"

+CIFSR:STAIP,"192.168.137.180"

+CIFSR:STAMAC,"80:64:6f:a8:75:e0"

OK

PC与 ESP8266 设备连接同一路由器,在PC端使用网络调试工具,建立一个 TCP 服务器。

假设:PC 创建的服务器IP 地址为 192.168.137.1,端⼝号为 8080

ESP8266 设备作为 TCP client 连接到上述服务器。

AT+CIPSTART="TCP","192.168.137.1",8080 //protocol,server IP and port

响应:OK

ESP8266 设备向服务器发送数据

AT+CIPSEND=16 //set date length which will be sent, such as 16 bytes

1234567890ABCDEF //enter the data, no CR

响应:Recv 16 bytes SEND OK

当 ESP8266 设备接收到服务器发来的数据,将提示如下信息:

+IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx

AT

测试

AT+RST

复位

AT+CWMODE=1

设置wifi模式 ap/sta/ap+sta

AT+CWJAP="rjy","12345678"

连接WIFI热点 (名称+密码)

AT+CIPMUX=0

设置单连接模式

AT+CIPSTART="TCP","192.168.1.1",8080

连接TCP服务器

AT+CIPSEND=5

发送数据

AT+CIPMODE=1

设置透传模式

AT+CIPSEND

使能透传发送

在数据传输过程中,数据在传输链路的起点到终点之间,不经过任何修改或处理地直接传递。换句话说,透传意味着数据在传输过程中保持其原始性。

在串口通信中,透传模式通常意味着数据从串口接收后,会原封不动地通过另一个串口发送出去,不会经过任何中间处理或修改。

在网络传输中,虽然数据包在传输过程中可能会经过多个路由器或交换机,但在透明传输(与透传相似但更广泛的概念)的情况下,这些数据包的内容不会在这些中间设备上被修改或检查,除非有特定的安全或路由需求。(防火墙关掉)

TCP测试:使用了安信可透传云

安信可透传云 V1.0

  1. 单片机控制ESP8266连接TCP程序编写

5.1 思路梳理

程序编写思路

  1. 看原理图,找串口(串口5-----》WiFi,串口1-----》串口助手)
  2. 配置工程------》MX
  3. 配置串口5(115200——》WiFi使用的是这个) 使能全局中断
  4. 配置串口1(115200) 使能全局中断
  5. 配置工程————》生成工程
  6. 打开工程一定先编译一次
  7. 写中断程序
    1. 使能串口5的接收中断(肯定不能使用轮询)
    2. 使能串口5的串口空闲中断(检查是否有数据传输)
    3. 找到中断向量表---》中断服务程序
    4. 在中断服务程序写接收程序
    5. 判断空闲线是否为空(1)表示完成
    6. 清除空闲中断标志位(不能自动清除。如果不轻触——》只要有中断就会进入)
    7. 计算接收数据的长度
    8. 重新指定接受数据缓冲区的地址
    9. 重新指定接受数据的最大长度(1024)
    10. 可以加一个数据标志位,判断数据完成
  8. 写串口1和串口5的发送数据
    1. 方法一:HAL用库(不能格式化输出 阻塞形式 指定长度);
    2. 方法二:重定向(用的是C库,只能重定向一个)
    3. 方法三:自己写格式化输出
  9. 实现AT指令并判断返回值

5.2 MX配置

5.3 串口收发程序编写

启动文件说明

【教程】一文搞懂STM32启动文件_eclipse stm32 启动文件-CSDN博客

mian函数中使能串口空闲中断(记得声明)

  HAL_UART_Receive_IT(&huart5,USART5_RxBuff,1024);
  __HAL_UART_ENABLE_IT(&huart5,UART_IT_IDLE);//空闲中断

去中断向量表->找中断服务程序(目的:判断是否接收数据完毕,完毕了计算接收了多少数据,并标记已经接受完毕)

extern uint8_t USART5_RxBuff[1024];
extern uint8_t USART5_RxCounter;
void UART5_IRQHandler(void)
{
     
  /* USER CODE BEGIN UART5_IRQn 0 */

  /* USER CODE END UART5_IRQn 0 */
  HAL_UART_IRQHandler(&huart5);//自带的不用管
  /* USER CODE BEGIN UART5_IRQn 1 */
	//以下的是咱们自己写的
	if(__HAL_UART_GET_FLAG(&huart5, UART_FLAG_IDLE) == SET)
  //判断是否触发串口空闲中断
	{
     
		int datalen = 0;
    //用于存储接收数据长度,这里的没有用,如果有需要可以弄全局变量
    __HAL_UART_CLEAR_IDLEFLAG(&huart5);    //清除空闲中断标志
    datalen = 1024 - huart5.RxXferCount;    //接收到多少数据
		//HAL_UART_Transmit(&huart1,(uint8_t*)USART5_RxBuff,datalen,10);
    //验证是否收到,正式功能里注释掉
		//memset(USART5_RxBuff,0,1024);
    //正式功能可以哪里使用数据,使用完清除
    huart5.RxXferCount = 1024;//初始化接收的最大数据量
    huart5.pRxBuffPtr = USART5_RxBuff;//定义缓冲区
   }
  /* USER CODE END UART5_IRQn 1 */
}
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值