物联网点灯项目:阿里云物联网平台+ESP32IDF+uniapp

这篇具有很好参考价值的文章主要介绍了物联网点灯项目:阿里云物联网平台+ESP32IDF+uniapp。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先看效果(不太清晰)  

视频演示效果

其次我讲一下大概的实现过程:前端用uniapp,(后来软工学长告诉我如果不是跨端开发的话完全可以不用uniapp,如果你要开发微信小程序就用微信开发者工具,如果你要开发移动端app就用安卓studio,因为我是自己琢磨的,当时只知道uniapp),和物联网平台通信用到了后端,以python的flask框架写的后端代码,发送命令后ESP32接收报文,解析并作出相应操作(本文是点灯,如果有其它外设可以扩展功能),同时上报设置属性到物联网平台。

具体流程如下:

1.后端代码编写

要下载阿里云物联网的pythonSDK,python的web框架——flask框架(因为我不太懂前端,因此用的是python,如果熟悉前端的话可以用node.js),这样的话我们就可以编写后端代码,用于和阿里云服务器平台通信了uniapp 物联网,物联网,物联网,阿里云,c语言

 后端功能代码示例如图所示,我截取的是检查设备是否在线函数:uniapp 物联网,物联网,物联网,阿里云,c语言

其实后端功能代码我们完全可以通过阿里云平台的API调试来剪取,具体获取方法如图:

uniapp 物联网,物联网,物联网,阿里云,c语言

 然后就可以查看你需要的实例代码了,截取相应部分到你的代码文件里uniapp 物联网,物联网,物联网,阿里云,c语言

 这样的话你就可以在你的相应文件里调试了,但是这时物联网平台的物模型属性值并不会改变,因为没有设备端上报。

2.编写前端接口

如图所示:uniapp 物联网,物联网,物联网,阿里云,c语言

这里的url必须是你的后端代码设置的ip地址加上你对应功能函数的路由,上文我的chekline函数路由设置的Checkline,因此我这里写的就是/Checkline,同时method也要对照你功能函数写的。res其实就是后端函数的返回值,前端利用后端的返回值就牵扯到JSON数据的解析,我就不过多解释。 

3.设备端ESP32的程序编写:

其实这里又分了几步

①订阅主题

阿里云物联网平台提供了很多主题uniapp 物联网,物联网,物联网,阿里云,c语言

uniapp 物联网,物联网,物联网,阿里云,c语言

我们这里只会用两个,一个是属性上报中的设备属性上报,用于设备的上报属性到物联网平台,另一个是属性设置,用于设备订阅主题,接收应用端发送的命令

这里我们就根据这里的主题名订阅主题,我ESP32的IDF代码如下: 

void mqtt_start()   //连接MQTT服务器
{
    esp_mqtt_client_config_t mqtt_cfg = {
        .host = CONFIG_BROKER_URL,
        .port = 1883,
        .client_id = "<your clientid>",  //这些数据都可以在阿里云物联网平台看到
        .username = "<your username>",
        .password = "<your password>",
        .user_context = NULL,
    };
    esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
    esp_mqtt_client_register_event(client, MQTT_EVENT_ANY, mqtt_event_handler, NULL);
    esp_mqtt_client_start(client);
}
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)    //事件处理回调函数
{
    int msg_id;
    esp_mqtt_event_handle_t event = event_data;
    esp_mqtt_client_handle_t client = event->client;
    switch (event_id)
    {
    case MQTT_EVENT_CONNECTED:
        ESP_LOGW(TAG, "Connectted successfully!");
        ESP_LOGW(TAG, "Subscribing topic....");
        msg_id = esp_mqtt_client_subscribe(client, "<your topic>", 0);  //这里就是订阅主题函数
        ESP_LOGW(TAG, "sent publish successful, msg_id=%d", msg_id);
        break;
    case MQTT_EVENT_DISCONNECTED:
        ESP_LOGW(TAG, "Disconnectted...");
        esp_mqtt_client_reconnect(client);
        break;
    case MQTT_EVENT_ERROR:
        ESP_LOGW(TAG, "Error...");
        esp_mqtt_client_reconnect(client);
        break;
    case MQTT_EVENT_DATA:
        ESP_LOGW(TAG, "MQTT_EVENT_DATA");
        parse_info(event->data);   //调用解析函数
        break;
    case MQTT_EVENT_SUBSCRIBED:
        ESP_LOGW(TAG, "Subscribed successfully!");
        break;
    case MQTT_EVENT_PUBLISHED:
        ESP_LOGW(TAG, "Published successfully!");
        break;
    default:
        break;
    }
}

②解析JSON数据

这里用到了ESP32的cJSON库,贴出我的代码,但是具体的物模型属性需要根据自己的进行修改

void parse_info(char *data)
{
    cJSON *root = cJSON_Parse(data);
    if (root == NULL)
    {
        ESP_LOGE(TAG, "JSON parsing failed!");
        return;
    }
    cJSON *paramsObj = cJSON_GetObjectItem(root, "params");
    if (paramsObj == NULL || !cJSON_IsObject(paramsObj))
    {
        ESP_LOGE(TAG, "Invalid params object!");
        cJSON_Delete(root);
        return;
    }
    // 获取temperature的值
    cJSON *Item = cJSON_GetObjectItem(paramsObj, "temperature");
    if (Item != NULL && cJSON_IsNumber(Item))
    {
        temperature = Item->valueint;
        ESP_LOGW(TAG, "Temperature: %u", temperature);
    }
    // 获取airmode的值
    Item = cJSON_GetObjectItem(paramsObj, "air_mode");
    if (Item != NULL && cJSON_IsNumber(Item))
    {
        air_mode = Item->valueint;
        ESP_LOGW(TAG, "Airmode: %u", air_mode);
    }
    // 获取灯的值
    Item = cJSON_GetObjectItem(paramsObj, "LED_state");
    if (Item != NULL && cJSON_IsNumber(Item))
    {
        light_state = Item->valueint;
        ESP_LOGW(TAG, "LED_state: %u", light_state);
    }
}

③设备做出响应

这样的话我们的动作状态的全局变量就相应的修改成了前端APP发来的理想值,可以通过轮询来检查这些数据的改变,同时检查到了改变的变量并会相应执行这样的动作,例如开灯啊,检查室内温度啊等等这样操作其实我们写起来都很容易,我就不具体贴出代码了。

④设备上报属性值

如果我们在执行操作过程中出现错误,打个比方,我们执行了开灯操作,但传感器检测到并没有开灯,这时我们就可以选择不上报属性,这样的话APP端询问物联网平台属性,如果没有改变则一直发命令等等,这些都是我的想法,我本身工程并没有搞得这么复杂。

一般来说执行操作是没有问题的,这样我们就需要把属性值上报给物联网平台。

我把这个函数贴出来:

esp_mqtt_client_publish(client, topic, "{\"params\":{\"<your property1>\":<value>,}}", strlen("{\"params\":{\"<your property2>\":<value>,}}"), 0, 0);

事实上,你这里会需要用到字符串剪切方法,因为你上报的数据一定是一串字符串,而C语言的快速字符串剪切有一个函数就是sprintf函数。

具体我也贴出我的代码:

char data[50];
sprintf(data, "{\"params\":{\"<property1>\":%u,\"<property2>\":%d}}",<property1val>, <property2val>);
esp_mqtt_client_publish(client, topic, data, strlen(data), 0, 0);

4.总结

这样的话,整个三端互通就完成了,你既可以在物联网平台监控属性,也可以在前端APP控制设备。目前我的项目存在的局限就是你的后端代码运行在电脑上的话,你的电脑必须一直在运行这个python文件才能与前端APP正常交接,而且是局域网IP,这要求你的设备和后端和前端必须在一个局域网内。这是存在的一个局限,但是其实可以买一个公网IP用于后端(记得学长是这么跟我说的)。

其实,我讲的很大概,因为主要是思路嘛,我是主要搞嵌入式的,对这个感兴趣才来搞着玩的。也没有前辈,网上资料也很少,我问客服(这里点名表扬阿里云的服务很好)和自己琢磨花费了大约一个月时间才搞懂,所以我觉得思路搞懂了,这些流程具体操作起来就很快了。文章来源地址https://www.toymoban.com/news/detail-811861.html

到了这里,关于物联网点灯项目:阿里云物联网平台+ESP32IDF+uniapp的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 合宙Air780e+luatos+阿里云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

    之前发布的文章有采用合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报,并以一个LED灯作为受控设备进行云端命令的控制,本期内容为使用了 阿里云 物联网平台完成同样

    2024年02月06日
    浏览(50)
  • 【ESP-01S / ESP8266 AT指令连接阿里云物联网平台】

    关注+星标 公众号,不错过精彩内容 作者 | MakingClub 微信公众号 | electronic造物实验室 注册阿里云账号并搜索物联网服务。选择并进入物联网平台产品页。 点击管理控制台,进入物联网平台管理界面。 选择公共实例(如果尚未开通,需要先进行开通,具体步骤不再赘述),然

    2024年02月07日
    浏览(65)
  • STM32 标准库+ESP8266+华为云物联网平台

    文章内容:     STM32标准库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应,并将相关代码打包成HuaweiIOT_at_esp8266.c和HuaweiIOT_at_esp8266.h驱动文件。 一、华为云物联网平台 创建 产品与设备

    2024年02月12日
    浏览(56)
  • STM32 HAL库+ESP8266+华为云物联网平台

    文章内容:     STM32 HAL库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应。     文末获取 “STM32 HAL库+ESP8266+华为云物联网平台keil工程 ”下载的链接。 一、华为云物联网平台 创建 产品

    2024年02月14日
    浏览(60)
  • STM32、ESP8266与MQTT连接阿里云物联网的串口通信异常解析

    STM32、ESP8266与MQTT协议连接阿里云物联网平台时常见的串口通信异常介绍 在构建物联网应用时,STM32、ESP8266与MQTT协议的结合是实现设备与网络间稳定通信的关键。然而,在连接阿里云物联网平台的过程中,串口通信异常成为了一个常见的挑战。本文将探讨这些异常现象及其可

    2024年04月22日
    浏览(47)
  • 【代码分享】ESP32接入华为云物联网平台完成属性定时上报(Arduino IDE开发)

    更多相关:华为云IOT物联网 论坛  之前带着大家写过使用esp8266接入华为云物联网平台的教程,有小伙伴后台私信,在ESP32接入华为云时遇到了问题,ESP32和ESP8266的代码几乎差不多的,ESP8266代码中用了“ESP8266.h”开发;ESP32可以直接用“WIFI.h”开发,教程基本和esp8266的那期教

    2024年02月13日
    浏览(56)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码)--1.创建产品和设备

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年04月25日
    浏览(89)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码) --3. STM32硬件连接+keil代码修改

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年02月05日
    浏览(50)
  • stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

    (示例:stm32f103c8t6+esp 01s 串口A T 指令模式) 流程简介:       本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令处理,在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进

    2024年02月02日
    浏览(50)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码)--4. Web数据可视化

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年04月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包