离线
TA的每日心情 | 慵懒 2021-7-23 17:16 |
---|
签到天数: 17 天 [LV.4]
|
有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 草帽王子 于 2021-5-18 19:20 编辑
ESP32-C3 mqtt操作实践
1.本文概述
2.环境搭建
3.esp32-c3 mqtt源代码编译与配置
4.手机控制
5.手机发送消息点亮led灯
5.1 设计思路
5.2 代码设计
5.3 功能测试
6.小结
1.本文概述
对于ESP32-C3模块,是乐鑫的第一个基于RISCV架构的芯片,其主要定位还是一个物联网模块,所以在使用上更多的去考虑物联网的应用。本文主要是介绍在ESP32-C3模块上使用MQTT进行通信。
MQTT在物联网领域的使用非常的广泛,其协议在众多的智能控制领域广泛的使用。
本次实验在使用上,可以将PC上搭建一个mosquitto的mqtt服务器,并且在手机上控制模块的行为。
2.环境搭建
主要是在Ubuntu20.04上进行开发,首先需要安装相关的开发环境,这一部分已经在前面的文章中介绍过了,现在主要介绍下面的步骤。
首先搭建mosquitto的mqtt服务器。下面用最简单的办法搭建好一个可以使用的mqtt服务器。
第一步:安装mosquitto
- $ sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
- $ sudo apt-get update
- $ sudo apt-get install mosquitto
复制代码 第二步:安装开发包和客户端
- $ sudo apt-get install libmosquitto-dev
- $ sudo apt-get install mosquitto-clients
复制代码 第三步:修改配置文件
正常情况下,上面步骤完成后,输入sudo service mosquitto start就可以启动了。
但是发现只能用localhost的ip地址或者127.0.0.1的ip地址,在本地才能访问。如果要让开发板正常的访问,显然是不行的。
所以此时修改了配置文件。
- sudo vim /etc/mosquitto/mosquitto.conf
复制代码 文件内容如下:
- # Place your local configuration in /etc/mosquitto/conf.d/
- #
- # A full description of the configuration file is at
- # /usr/share/doc/mosquitto/examples/mosquitto.conf.example
- persistence true
- persistence_location /var/lib/mosquitto/
- bind_address 192.168.15.123
- # 禁止匿名访问
- allow_anonymous true
- # 认证配置
- #password_file /etc/mosquitto/pwfile
- # 权限配置
- #acl_file /etc/mosquitto/aclfile
- log_dest file /var/log/mosquitto/mosquitto.log
- include_dir /etc/mosquitto/conf.d
复制代码 解释一下上述的配置
bind_address 192.168.15.123这里设置是服务器的ip地址,如果不设置,只能访问 127.0.0.1。后面的ip地址可以根据自己电脑的ip地址进行设置。
allow_anonymous true这里的参数配置为true表示可以不需要用户名和密码访问,否则如果填写成 false则需要配置认证和权限,这里简单起见,不用用户名密码。
第四步:启动mosquitto
输入下面的命令即可
- sudo service mosquitto start
复制代码 如果需要停止
- sudo service mosquitto stop
复制代码 还可以查看是否正常的启动。
- sudo service mosquitto status
复制代码 如下图所示,表示启动成功。
第五步:功能验证和环境测试
往往看服务器是否搭建成功,需要测试一下,这里先本地测试一下。
首先订阅一个topic
- mosquitto_sub -h 192.168.15.123 -t "test_mqtt" -v
复制代码 另外再开一个终端,往这个topic发布消息。
- mosquitto_pub -t "test_mqtt" -h 192.168.15.123 -m "hello_mqtt"
复制代码 最后可以看到效果如下
可以说明mqtt服务器基本成功。
3.esp32-c3 mqtt源代码编译与配置
前文已经搭建好开发环境,这里只说明操作步骤。
首先将ESP-IDF中的protocols的例程拷贝到自己的工作路径下。
- cp -r $IDF_PATH/examples/protocols .
复制代码 接着找到mqtt/tcp的例子。
设置相关的编译目标为esp32c3。
- idf.py set-target esp32c3
复制代码 选择配置
这里有两个地方的配置需要自行填写。
其中的Example Connection Configuration用于配置wifi的连接信息。
而Example Configuration则是配置mqtt的服务器地址。
该地址前面记得加上mqtt://这样才能正常的解析,其地址为刚才搭建好的mqtt服务器的地址。
配置完成后开始编译
下载
- idf.py -p /dev/ttyUSB0 flash
复制代码 查看串口信息
- idf.py -p /dev/ttyUSB0 monitor
复制代码 正常情况下,会输入下面的信息
其topic为/topic/qos0。
注意:需要保证esp32-c3模块与mqtt服务器的电脑在同一个局域网内,这样才能正常的操作。
然后pc往开发板发一条消息。
- mosquitto_pub -t /topic/qos0 -h 192.168.15.123 -m "test_esp32"
复制代码 其中-t /topic/qos0表示需要往那个topic发送。
此时,可以看到开发板正常接受到了pc发过来的消息。
4.手机控制
此处只做局域网内的控制,也就是手机、电脑、esp32-c3在同一个局域网内,如果要远程控制,那么需要进行内网穿透。
本次用安卓手机做演示
下载EasyMQTT客户端。
添加连接,设置Broker为服务器地址。
正常情况下连接服务器如下
选择箭头,然后填写topic和消息
这样,就可以通过手机往开发板发送消息了。
5.手机发送消息点亮led灯
5.1 设计思路
基本的思路是手机连接mqtt的服务器,通过发布topic,电脑和开发板监听该topic,当开发板监听到该topic的消息后,将收到的数据解析出来。比如led=on表示开灯,led=off关灯。
点灯采用外接的GPIO,因为板载的LED需要PWM。
5.2 代码设计
在ESP32 IDF的编程模型中,对于GPIO的控制也是通过API接口进行控制。
最基本的操作
- gpio_reset_pin(LED_CTL); //复位gpio
- gpio_set_direction(LED_CTL, GPIO_MODE_OUTPUT); //设置gpio为输出模式
- gpio_set_level(LED_CTL, 1); //设置为高电平
复制代码 配置完成后,可以在
- static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
复制代码 函数中编写操作逻辑。
- case MQTT_EVENT_DATA:
- ESP_LOGI(TAG, "MQTT_EVENT_DATA");
- printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
- printf("DATA=%.*s\r\n", event->data_len, event->data);
- if(strstr(event->data, "led=on") != NULL)
- {
- gpio_set_level(LED_CTL, 0);
- }
- else if(trstr(event->data, "led=off") != NULL)
- {
- gpio_set_level(LED_CTL, 1);
- }
- break;
复制代码 当接受到led=on的指令,将GPIO拉低,此时灯点亮。
当接受到led=off的指令,将GPIO拉低,此时灯熄灭。
这样就完成了程序的设计。
硬件上的连接采用的GPIO3。
5.3 功能测试
输入idf.py build开始编译程序,并且输入idf.py -p /dev/ttyUSB0 flash开始下载。
最后idf.py -p /dev/ttyUSB0 monitor监听数据。
可以正常观测到数据了。
手机上发送led=on的消息,可以看到led被点亮。
6.小结
在esp32-c3上做mqtt的业务逻辑设计,使用上注意mqtt的服务器的搭建,以及esp32-c3的mqtt的相关例子,还有将整个链路弄清楚即可。
从上层逻辑上来看,这种ESP-IDF的框架更加友好,通过对mqtt协议层面的支持,使得用户拿到数据后,直接控制相关的硬件操作即可。
做室内的智能家居应用也是非常好的选择。
完
|
上一篇: 嵌入式IoT[04]_ESP32-C3上手体验与开发环境搭建下一篇: 乐鑫ESP32-C3 RISC-V处理器IoT开发板 自带WiFi BLE SoC量产了?
|