佰推网logo

400-844-5354

当前位置:网站首页 > 新闻动态 > 小程序开发资讯

(微信小程序控制硬件第1篇)全网首发,借助emq消息服务器,轻松控制智能硬件!

日期:2023-07-30访问量:0类型:小程序开发资讯

微信小程序控制硬件第一篇】全网首发,借助emq消息服务器,带你搭建微信小程序的mqtt服务器,轻松控制智能硬件!

【微信小程序控制硬件第二篇】开启微信小程序之旅,导入小程序Mqtt客户端源码,实现简单的验证以及与服务器的通信!

【微信小程序控制硬件第三部分】从软件到硬件搭建微信小程序控制项目,定制通讯协议,面试岗位、比赛加分!

【微信小程序控制硬件第四篇】深入解析微信公众号分发网络的原理和流程,如何给微信自定义回调参数,实现绑定设备第一步!

【微信小程序控制硬件第五篇】明确接下来必须遵循的架构思想,学习观察者模式,同时接收微信小程序多个页面的设备推送事件!

【微信小程序控制硬件第六篇】服务器如何集成七牛云存储SDK,将用户自定义的设备图片存储在第三方服务器中!

【微信小程序控制硬件第七篇】来做一个微信小程序Mqtt协议控制智能硬件框架,浇灌心中的全栈工程师梦想吧! !

【微信小程序控制硬件第八部分】微信小程序用于连接阿里云IOT物联网平台的mqtt服务器。 包装和使用就是这么简单!

【微信小程序控制硬件第9部分】巧妙地利用阿里云物联网平台的自由连接,我们可以从微信小程序颜色中采集并控制七彩灯光的输出。 中秋节直播怎么样? !

【微信公众号控制硬件第10篇】微信公众号网页如何连接mqtt服务器教程! !

【微信小程序控制硬件第11篇】全网首发,微信小程序ble蓝牙控制esp32,实现无需网络即可控制亮度开关。

【微信小程序控制硬件第十二篇】微信小程序蓝牙控制硬件应该如何开发? 全面为您解析微信小程序蓝牙API的使用。

【微信小程序控制硬件第十三篇】安信客B站直播学习总结,微信小程序MQTT远程控制,聊聊微信生态。

文章目录

前言

上周日晚上7:00到9:00,我在B站直播了一场《微信小程序MQTT远程控制》直播,过程中我尽力讲解了微信硬件云目前的术语和应用技术; 当数据到达时,汽车翻了。 后来我私下仔细搜索了这个bug,发现这个bug以前也遇到过,但是头脑不够清晰,无法回忆和搜索;

总的来说,我对前半部分还是比较满意的,给大家带来了一些术语理论。 毕竟微信硬件云已经维护很久了。 不过控,微信硬件云集成了微信公众号的所有优点,已经是一个成熟的解决方案。 这是面向个人和公司的,具有很大的商业价值!

然而我发现,在这个过程中,还是有有目的的喷子过来带节奏,吐槽安心有多糟糕。 当我在我的直播间发现这种事情时,我很平静; 有这样的人,包括最近的“名人捐款道德绑架”,直播看多了就会发现:

内心强大的人可以忽略这些巨魔,做自己!

看看下面的现场回放:

【直播回放】微信小程序MQTT远程控制安信客。 (优越的)

1、材料准备

模块

微信小程序账号

百度天工服务器

(微信小程序控制硬件第1篇)全网首发,借助emq消息服务器,轻松控制智能硬件!

2.对微信硬件云的初步了解

这里我们必须熟悉微信终端控制设备的各种接入方案和技术,并且必须熟悉微信硬件云:

微信公众号配网:技术,功能是通过微信公众号快速连接指定路由器的具有WiFI功能的设备模块; 、ESP32等模块支持; 微信公众号通信:技术,功能是与微信公众号具有蓝牙功能的设备模块相互通信,比如我们常见的微信公众号打印照片; 微信公众号近场发现:又称为局域网发现功能,顾名思义,就是可以发现局域网中连接到路由器的设备。 注意:这种通讯只能是单向的,设备---->公众号! 微信公众号JS-SDK:微信公众号开发也是Web开发的一种,所以微信有专门的微信公众号JS-SDK开发资源包,可以调用网页H5侧的网络配置接口将您的设备连接到路由器;设备直连微信硬件云SDK:顾名思义,就是将设备直接连接到微信硬件云平台,打通硬件云的生态链接; 设备厂商云接入微信硬件云:厂商云接入微信硬件云方案,即设备厂商使用自有云或第三方云与微信硬件云对接方案。 比如蜂巢扫码取快递!

设备厂商云连接微信硬件云和设备直连微信硬件云流程图:

综上所述,设备商云接入微信硬件云时,必须有自己的服务器业务逻辑来接入微信硬件云! 大部分业务逻辑都是在私有服务器上完成的! 如果设备直接连接微信硬件云,那么公司的嵌入式开发工程师一定要熟悉设备端SDK API的使用,因为这是根据微信硬件云的介绍文档开发的!

要接入以上两种方案,您必须熟悉其SDK文档的开发流程。 有没有一个标准协议可以让你自己开发并控制,而不需要直接连接微信硬件云?

答:是的!

三、本项目的实现原理

注意角色:(设备-->设备商云-->服务器,微信客户端-->微信小程序):

首先,请仔细看上图。 这就是我在这篇文章中实现的控制流程,也是我想到的控制流程!

概述:

4、本项目通信协议主体的消息含义:发送方和接收方消息(JSON格式)

/光/

微信小程序

"{"":"功率","值":true}"

打开灯

"{"":"功率","值":"假"}"

把灯关掉

"{"":"pwm","值":50}"

调节亮度:value为亮度值,范围[0, 100]

"{"":"查询","值":0}"

微信小程序主动请求最新状态

主题发送方接收方消息(JSON格式)消息含义

(微信小程序控制硬件第1篇)全网首发,借助emq消息服务器,轻松控制智能硬件!

/光/

微信小程序

"{"power":"false","":50}"

power 是灯的状态,也就是亮度值,范围是[0, 100]

五、百度天宫服务器注册

注册后,您需要获取MQTT连接的参数,包括:

具体过程请看视频播放;

6.连接百度天工云; 6.1 初始化LED驱动代码

这里我手上的正品安芯科上的蓝色是GPIO2连接,低电平有效,非高电平有效! ! 其他人我不知道!

//PWM 周期 100us(也就是10Khz)
#define PWM_PERIOD (100)
//pwm gpio口配置
#define CHANNLE_PWM_TOTAL 1 //一共1个通道
#define CHANNLE_PWM 0
#define PWM_OUT_IO_NUM 2 //灯管脚 也就是我们NodeMCU的蓝灯
// pwm pin number
const uint32_t pinNum[CHANNLE_PWM_TOTAL] = {PWM_OUT_IO_NUM};
// don't alter it !!! dutys table, (duty/PERIOD)*depth , init
uint32_t setDuties[CHANNLE_PWM_TOTAL] = {50};
//相位设置,不懂的或者不需要的全部为0即可
int16_t phase[CHANNLE_PWM_TOTAL] = {
    0,
};
void TaskGpio(void *p)
{
    pwm_init(PWM_PERIOD, setDuties, CHANNLE_PWM_TOTAL, pinNum);
    //设置相位:具体有什么用? 访问了解 https://blog.csdn.net/xh870189248/article/details/88526251#PWM_143
    pwm_set_phases(phase);
    //我司安信可出品的 NodeMCU的蓝灯是低电平有效,设置反相低电平有效
    pwm_set_channel_invert(1ULL<< 0);
    //设置50%亮度
    pwm_set_start(50);
    vTaskDelete(NULL);
}

6.2 初始化MQTT连接

static void mqtt_app_start(void)
{
    esp_mqtt_client_config_t mqtt_cfg = {
        .event_handle = mqtt_event_handler,
        .host = "xxxxxx.mqtt.iot.gz.baidubce.com",
        .username = "xxxxxx/device",
        .password = "LXSFzu50zI5ezBrl",
        .port = 1883,
        .keepalive = 200,
    };
    esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
    esp_mqtt_client_start(client);
}

6.3 接收服务器发送的数据的分析处理动作:

敲代码前一定要先看协议!

        ESP_LOGI(TAG, "MQTT_EVENT_DATA");
        {
            首先整体判断是否为一个json格式的数据
            cJSON *pJsonRoot = cJSON_Parse(event->data);
            //如果是否json格式数据
            if (pJsonRoot == NULL)
            {
                break;
            }
            cJSON *pChange = cJSON_GetObjectItem(pJsonRoot, "change");
            cJSON *pValue = cJSON_GetObjectItem(pJsonRoot, "value");
            //判断字段是否pChange格式
            if (pChange && pValue)
            {
                //用来打印服务器的topic主题
                ESP_LOGI(TAG, "xQueueReceive topic: %.*s ", event->topic_len, event->topic);
                //打印用于接收服务器的json数据
                ESP_LOGI(TAG, "xQueueReceive payload: %.*s",event->data_len, event->data);
                ESP_LOGI(TAG, "esp_get_free_heap_size : %d \n", esp_get_free_heap_size());
                //判断字段是否string类型
                if (cJSON_IsString(pChange))
                    printf("get pChange:%s \n", pChange->valuestring);
                else
                    break;
                //获取最新的状态,对应的获取温湿度按钮
                if (strcmp(pChange->valuestring, "query") == 0)
                {
                }
                //收到服务器的开关灯指令
                else if (strcmp(pChange->valuestring, "power") == 0)
                {
                    //开灯
                    if (strcmp(pValue->valuestring, "true") == 0)
                    {
                        pwm_set_start(100);
                    }
                    //关灯
                    else
                    {
                        pwm_set_start(0);
                    }
                }
                //收到服务器的调节亮度灯指令
                else if (strcmp(pChange->valuestring, "pwm") == 0)
                {
                    pwm_set_start(pValue->valueint);
                    // 主动发送数组到串口
                }
                //每次下发成功控制都要主动上报给服务器
                post_data_to_clouds();
            }
            else
                printf("get pChange failed \n");
             //删除cjson,释放内存
            cJSON_Delete(pJsonRoot);

6.4 设备报告

/**
 * @description: 上报数据给服务器
 * @param {type} 
 * @return: 
 */
static void post_data_to_clouds()
{
    cJSON *pRoot = cJSON_CreateObject();
    uint32_t duty_p = 0;
    //获取当前的pwm输出百分比
    if (pwm_get_duty(CHANNLE_PWM, &duty_p) != ESP_OK)
    {
        printf("Error in getting period...\n\n");
    }
    //是否为0,否则就是开灯状态!
    if (duty_p != 0)
        cJSON_AddBoolToObject(pRoot, "power", true);
    else
        cJSON_AddBoolToObject(pRoot, "power", false);
    //上报pwm百分比,作为亮度参数给服务器
    cJSON_AddNumberToObject(pRoot, "brightNess", duty_p);
    //格式化为字符串
    char *s = cJSON_Print(pRoot);
    //发布消息
    esp_mqtt_client_publish(client, MQTT_DATA_PUBLISH, s, strlen(s), 1, 0);
    //删除json结构体,释放内存
    cJSON_free((void *)s);
    cJSON_Delete(pRoot);
}

这时我们可以在后台模拟小程序连接服务器来控制;

七、微信小程序MQTT接入百度天工

以上设备通过TCP MQTT与天工连接,微信小程序属于网页前端,所以采用MQTT协议;

这里已经有一个开源库,集成了微信小程序连接mqtt服务器的实现,可以控制智能硬件等需求。

下载后导入微信小程序开发工具,打开文件/pages/并修改连接参数:服务器域名、用户名、密码等参数;

如果您需要美化UI等操作,请自行修改UI设计或者将代码集成到您的项目中!

另外,不要把我的博客当成学习的标准,我的只是笔记,很难疏忽。 如果有的话请指出,也欢迎留言!


TAG标签:小程序mqtt 

声明:本文来自投稿,不代表佰推网立场,如若转载,请注明出处:http://www.ccsuit.cn/news/show339.html 若本站的内容无意侵犯了贵司版权,请给我们来信,我们会及时处理和回复。

相关新闻

相关案例

X微信咨询

截屏,微信识别二维码

微信号:dianzana1989

(点击微信号复制,添加好友)

  打开微信

微信号已复制,请打开微信添加咨询详情!