ESP32开发环境
1、准备工作
- python3,版本3.7以上,
如提示pip为低版本,需要更新pip至version20.2.4
C:\Users\admin\.espressif\python_env\idf4.3_py3.9_env\Scripts\python.exe -m pip install --upgrade pip
- Git工具下载网址
- C++ build
C++ build安装,有以下两个方式:
<1>通过VS Studio安装包来安装;
<2>通过C++ build tools软件安装;
因考虑安装VS Studio较耗时,我这里采取C++ build tools软件安装;
2、ESP-IDF安装
使用VS Code下的ESP-IDF插件进行安装,ESP-IDF使用手册

3、工程build
注意,build工程需要单独打开一个独立的工程,如打开整个example文件夹,无法进行工程编译;

4、sdkconfig文件
例程先build,导出sdkconfig配置文件,相关宏参数修改在sdkconfig文件里。

5、ESP32-TCP-Server
ESP32做服务端例程参考sockets/tcp_server,ESP32做服务端,手机作为客户端,客户端需要配置服务端IP和Port,客户端往服务端发送数据,回传发送的数据;
如IP/Port设置都匹配的话,还是无法连接的情况下,可考虑重启路由器!!!
#define CONFIG_EXAMPLE_CONNECT_WIFI 1
#define CONFIG_EXAMPLE_WIFI_SSID "PDCN" //SSID
#define CONFIG_EXAMPLE_WIFI_PASSWORD "1234567890" //PASSWORD
6、ESP32-TCP-Client
ESP32做TCP客户端例程参考sockets/tcp_client,ESP32做客户端,手机作为服务端,客户端往服务端"Message from ESP32";

#define CONFIG_EXAMPLE_IPV4 1
#define CONFIG_EXAMPLE_IPV4_ADDR "192.168.99.10" //服务端IP
#define CONFIG_EXAMPLE_PORT 3333 //服务端Port
#define CONFIG_EXAMPLE_CONNECT_WIFI 1
#define CONFIG_EXAMPLE_WIFI_SSID "PDCN" //SSID
#define CONFIG_EXAMPLE_WIFI_PASSWORD "1234567890" //PASSWORD

- 客户端(ESP32)连接服务端(mobilephone):192.168.99.10:3333
- 配置成功显示Successfully connect
- ESP32接收到来自服务端发送的hello dobot
- 接收完毕回复Message from ESP32

7、Aliyun - MQTT
Message Queuing Telemetry Transport,消息队列遥测传输协议,MQTT-3.1.1中文
- 优点:精简高效
- 服务质量定义
阿里云仅支持等级0和等级1, 等级2以上太耗费资源
| QoS值 | Bit2 | Bit1 | 描述 |
|---|---|---|---|
| 0 | 0 | 0 | 最多分发一次 |
| 1 | 0 | 1 | 至少分发一次 |
| 2 | 1 | 0 | 只分发一次 |
| - | 1 | 1 | 保留位 |
- 14个报文,具体参考<MQTT-3.1.1标准协议文档.pdf>, 协议视频讲解b站网址
| 报文 | 描述 | 流向 | 值 | 固定报头 | 可变报头 | 负载 |
|---|---|---|---|---|---|---|
| CONNECT | 客户端请求与服务端建立连接 | C->S | 1 | 有 | 有 | 有 |
| CONNACK | 服务端确认连接建立 | S->C | 2 | 有 | 有 | 有 |
| PUBLISH | 发布消息 | C<->S | 3 | 有 | 有 | 有 |
| PUBACK | 收到发布消息确认(QoS1等级) | C<->S | 4 | 有 | 有 | 无 |
| PUBREC | 发布消息收到(QoS2等级) | C<->S | 5 | 有 | 有 | 无 |
| PUBREL | 发布消息释放(QoS2等级) | C<->S | 6 | 有 | 有 | 无 |
| PUBCOMP | 发布消息完成(QoS2等级) | C<->S | 7 | 有 | 有 | 无 |
| SUBSCRIBE | 订阅请求 | C->S | 8 | 有 | 有 | 有 |
| SUBACK | 订阅确认 | S->C | 9 | 有 | 有 | 有 |
| UNSUBSCRIBE | 取消订阅 | C->S | 10 | 有 | 有 | 有 |
| UNSUBACK | 取消订阅确认 | S->C | 11 | 有 | 有 | 无 |
| PING | 客户端发送PING(连接保活)命令 | C->S | 12 | 有 | 无 | 无 |
| PINGRSP | PING命令回复 | S->C | 13 | 有 | 无 | 无 |
| DISCONNECT | 断开连接 | C->S | 14 | 有 | 无 | 无 |
- 物模型
- 设备三元组:ProductKey,DeviceName,DeviceSecret
8、LwIP
技能树:TCP/IP、LwIP、freertos
- LwIP是轻量级IP协议,重点是保持TCP协议主要功能的基础上减少对RAM的占用
- 提供三种用户编程接口: raw/callback API 、sequential(Netconn) API、 BSD-style socket API
- ESP32采用freertos实时系统的Netconn API
- sys_arch.c主要实现是与消息邮箱、信号量和创建进程有关的函数,上层API与协议栈内核的数据交互就是通过消息邮箱和信号量来完成的。
- lwipopts.h主要是用来裁剪和配置LwIP的,如使用RTOS的话就需要对其进行配置。
#define NO_SYS 0
#define SYS_LIGHTWEIGHT_PROT 0
#define LWIP_NETCONN !NO_SYS
#define LWIP_SOCKET !NO_SYS
#define LWIP_NETCONN_FULLDUPLEX LWIP_SOCKET
#define LWIP_NETBUF_RECVINFO 1
#define LWIP_HAVE_LOOPIF 1
#define TCPIP_THREAD_TEST
- 因为使用freertos实时系统,所以NO_SYS定位为0;
- 使用RTOS时我们要对LwIP中关键代码做保护,所以要定义SYS_LIGHTWEIGHT_PROT为1;
- 使用NETCONN编程的话定义LWIP_NETCONN为1;
- 使用Socket编程的话定义LWIP_SOCKET为1;
- sys_arch.h中定义了消息邮箱的数量和每个消息邮箱的大小,还定义了四种数据类型:sys_sem_t(semaphore信号量)、 sys_mutex_t(mutex互斥)、 sys_mbox_t(mbox消息邮箱)、 sys_thread_t(thread线程)。
| 名称 | 功能 | 所在文件 |
|---|---|---|
| sys_sem_t | 指针,指向信号量 | sys_arch.h |
| sys_mutex_t | 指针,指向互斥信号量 | sys_arch.h |
| sys_mbox_t | 指针,指向消息邮箱 | sys_arch.h |
| sys_thread_t | 任务ID | sys_arch.h |
| sys_mbox_new | 创建消息邮箱 | sys_arch.c |
| sys_mbox_free | 删除一个邮箱 | sys_arch.c |
| sys_mbox_post | 向邮箱投递消息,阻塞 | sys_arch.c |
| sys_mbox_trypost | 尝试向邮箱投递消息,不阻塞 | sys_arch.c |
| sys_mbox_fetch | 获取消息,阻塞 | sys_arch.c |
| sys_mbox_trypost | 尝试获取消息 | sys_arch.c |
| sys_mbox_valid | 检查一个邮箱是否有效 | sys_arch.c |
| sys_mbox_set_invalid | 设置一个邮箱无效 | sys_arch.c |
| sys_sem_new | 创建一个信号量 | sys_arch.c |
| sys_arch_sem_wait | 等待一个信号量 | sys_arch.c |
| sys_sem_signal | 释放一个信号量 | sys_arch.c |
| sys_sem_free | 删除一个信号量 | sys_arch.c |
| sys_sem_valid | 查询一个信号量是否有效 | sys_arch.c |
| sys_sem_set_invalid | 设置一个信号量无效 | sys_arch.c |
| sys_thread_new | 创建进程 | sys_arch.c |
| sys_init | 初始化操作系统模拟层 | sys_arch.c |
| sys_msleep | LwIP延时系统 | sys_arch.c |
| sys_now | 获取当前系统时间 | sys_arch.c |
参考手册:
本文档详细介绍了ESP32的开发环境搭建步骤,包括准备Python和Git,安装ESP-IDF,使用VS Code插件,工程build,配置sdkconfig文件,以及ESP32作为TCP Server和Client的示例。此外,还涉及了Aliyun MQTT协议和LwIP的使用,LwIP在ESP32中如何裁剪和配置。
2663

被折叠的 条评论
为什么被折叠?



