查看: 1168|回复: 0
收起左侧

嵌入式IoT[05]_ESP32-C3 mqtt操作实践

[复制链接]

  离线 

  • TA的每日心情
    慵懒
    2021-7-23 17:16
  • 签到天数: 17 天

    [LV.4]

    发表于 2021-5-18 19:21:35 | 显示全部楼层 |阅读模式

    有人预言,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
    1. $ sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
    2. $ sudo apt-get update
    3. $ sudo apt-get install mosquitto
    复制代码
    第二步:安装开发包和客户端
    1. $ sudo apt-get install libmosquitto-dev
    2. $ sudo apt-get install mosquitto-clients
    复制代码
    第三步:修改配置文件

    正常情况下,上面步骤完成后,输入sudo service mosquitto start就可以启动了。

    但是发现只能用localhost的ip地址或者127.0.0.1的ip地址,在本地才能访问。如果要让开发板正常的访问,显然是不行的。

    所以此时修改了配置文件。
    1. sudo vim /etc/mosquitto/mosquitto.conf
    复制代码
    文件内容如下:
    1. # Place your local configuration in /etc/mosquitto/conf.d/
    2. #
    3. # A full description of the configuration file is at
    4. # /usr/share/doc/mosquitto/examples/mosquitto.conf.example

    5. persistence true
    6. persistence_location /var/lib/mosquitto/

    7. bind_address 192.168.15.123

    8. # 禁止匿名访问
    9. allow_anonymous true

    10. # 认证配置
    11. #password_file /etc/mosquitto/pwfile

    12. # 权限配置
    13. #acl_file /etc/mosquitto/aclfile

    14. log_dest file /var/log/mosquitto/mosquitto.log

    15. 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

    输入下面的命令即可
    1. sudo service mosquitto start
    复制代码
    如果需要停止
    1. sudo service mosquitto stop
    复制代码
    还可以查看是否正常的启动。
    1. sudo service mosquitto status
    复制代码
    如下图所示,表示启动成功。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(1)

    第五步:功能验证和环境测试

    往往看服务器是否搭建成功,需要测试一下,这里先本地测试一下。

    首先订阅一个topic
    1. mosquitto_sub -h 192.168.15.123 -t "test_mqtt" -v
    复制代码
    另外再开一个终端,往这个topic发布消息。
    1. mosquitto_pub -t "test_mqtt" -h 192.168.15.123 -m "hello_mqtt"
    复制代码
    最后可以看到效果如下
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(2)

    可以说明mqtt服务器基本成功。


    3.esp32-c3 mqtt源代码编译与配置

    前文已经搭建好开发环境,这里只说明操作步骤。

    首先将ESP-IDF中的protocols的例程拷贝到自己的工作路径下。
    1. cp -r $IDF_PATH/examples/protocols .
    复制代码
    接着找到mqtt/tcp的例子。
    1. cd protocols/mqtt/tcp
    复制代码
    设置相关的编译目标为esp32c3。
    1. idf.py set-target esp32c3
    复制代码
    选择配置
    1. idf.py menuconfig
    复制代码
    这里有两个地方的配置需要自行填写。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(3)

    其中的Example Connection Configuration用于配置wifi的连接信息。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(4)

    而Example Configuration则是配置mqtt的服务器地址。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(5)

    该地址前面记得加上mqtt://这样才能正常的解析,其地址为刚才搭建好的mqtt服务器的地址。

    配置完成后开始编译
    1. idf.py build
    复制代码
    下载
    1. idf.py -p /dev/ttyUSB0 flash
    复制代码
    查看串口信息
    1. idf.py -p /dev/ttyUSB0 monitor
    复制代码
    正常情况下,会输入下面的信息
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(6)

    其topic为/topic/qos0。

    注意:需要保证esp32-c3模块与mqtt服务器的电脑在同一个局域网内,这样才能正常的操作。

    然后pc往开发板发一条消息。
    1. mosquitto_pub -t /topic/qos0 -h 192.168.15.123 -m "test_esp32"
    复制代码
    其中-t /topic/qos0表示需要往那个topic发送。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(7)
    此时,可以看到开发板正常接受到了pc发过来的消息。


    4.手机控制

    此处只做局域网内的控制,也就是手机、电脑、esp32-c3在同一个局域网内,如果要远程控制,那么需要进行内网穿透。

    本次用安卓手机做演示
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(8)

    下载EasyMQTT客户端。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(9)

    添加连接,设置Broker为服务器地址。

    正常情况下连接服务器如下
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(10)

    选择箭头,然后填写topic和消息
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(11)

    这样,就可以通过手机往开发板发送消息了。


    5.手机发送消息点亮led灯

    5.1 设计思路

    基本的思路是手机连接mqtt的服务器,通过发布topic,电脑和开发板监听该topic,当开发板监听到该topic的消息后,将收到的数据解析出来。比如led=on表示开灯,led=off关灯。

    点灯采用外接的GPIO,因为板载的LED需要PWM。

    5.2 代码设计

    在ESP32 IDF的编程模型中,对于GPIO的控制也是通过API接口进行控制。

    最基本的操作
    1. gpio_reset_pin(LED_CTL); //复位gpio
    2. gpio_set_direction(LED_CTL, GPIO_MODE_OUTPUT); //设置gpio为输出模式
    3. gpio_set_level(LED_CTL, 1); //设置为高电平
    复制代码
    配置完成后,可以在
    1. static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
    复制代码
    函数中编写操作逻辑。
    1. case MQTT_EVENT_DATA:
    2.      ESP_LOGI(TAG, "MQTT_EVENT_DATA");
    3.      printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
    4.      printf("DATA=%.*s\r\n", event->data_len, event->data);
    5.      if(strstr(event->data, "led=on") != NULL)
    6.      {
    7.           gpio_set_level(LED_CTL, 0);
    8.      }
    9.      else if(trstr(event->data, "led=off") != NULL)
    10.      {
    11.            gpio_set_level(LED_CTL, 1);
    12.      }
    13.      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监听数据。

    可以正常观测到数据了。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(12)

    手机上发送led=on的消息,可以看到led被点亮。
    ESP32-C3 单片机芯片-嵌入式IoT[05]_ESP32-C3 mqtt操作实践risc-v单片机中文社区(13)


    6.小结

    在esp32-c3上做mqtt的业务逻辑设计,使用上注意mqtt的服务器的搭建,以及esp32-c3的mqtt的相关例子,还有将整个链路弄清楚即可。

    从上层逻辑上来看,这种ESP-IDF的框架更加友好,通过对mqtt协议层面的支持,使得用户拿到数据后,直接控制相关的硬件操作即可。

    做室内的智能家居应用也是非常好的选择。






    上一篇:嵌入式IoT[04]_ESP32-C3上手体验与开发环境搭建
    下一篇:乐鑫ESP32-C3 RISC-V处理器IoT开发板 自带WiFi BLE SoC量产了?
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-3-29 08:19 , Processed in 0.530576 second(s), 48 queries .

    快速回复 返回顶部 返回列表