日期: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、材料准备
模块
微信小程序账号
百度天工服务器
2.对微信硬件云的初步了解
这里我们必须熟悉微信终端控制设备的各种接入方案和技术,并且必须熟悉微信硬件云:
微信公众号配网:技术,功能是通过微信公众号快速连接指定路由器的具有WiFI功能的设备模块; 、ESP32等模块支持; 微信公众号通信:技术,功能是与微信公众号具有蓝牙功能的设备模块相互通信,比如我们常见的微信公众号打印照片; 微信公众号近场发现:又称为局域网发现功能,顾名思义,就是可以发现局域网中连接到路由器的设备。 注意:这种通讯只能是单向的,设备---->公众号! 微信公众号JS-SDK:微信公众号开发也是Web开发的一种,所以微信有专门的微信公众号JS-SDK开发资源包,可以调用网页H5侧的网络配置接口将您的设备连接到路由器;设备直连微信硬件云SDK:顾名思义,就是将设备直接连接到微信硬件云平台,打通硬件云的生态链接; 设备厂商云接入微信硬件云:厂商云接入微信硬件云方案,即设备厂商使用自有云或第三方云与微信硬件云对接方案。 比如蜂巢扫码取快递!
设备厂商云连接微信硬件云和设备直连微信硬件云流程图:
综上所述,设备商云接入微信硬件云时,必须有自己的服务器业务逻辑来接入微信硬件云! 大部分业务逻辑都是在私有服务器上完成的! 如果设备直接连接微信硬件云,那么公司的嵌入式开发工程师一定要熟悉设备端SDK API的使用,因为这是根据微信硬件云的介绍文档开发的!
要接入以上两种方案,您必须熟悉其SDK文档的开发流程。 有没有一个标准协议可以让你自己开发并控制,而不需要直接连接微信硬件云?
答:是的!
三、本项目的实现原理
注意角色:(设备-->设备商云-->服务器,微信客户端-->微信小程序):
首先,请仔细看上图。 这就是我在这篇文章中实现的控制流程,也是我想到的控制流程!
概述:
4、本项目通信协议主体的消息含义:发送方和接收方消息(JSON格式)
/光/
微信小程序
"{"":"功率","值":true}"
打开灯
"{"":"功率","值":"假"}"
把灯关掉
"{"":"pwm","值":50}"
调节亮度:value为亮度值,范围[0, 100]
"{"":"查询","值":0}"
微信小程序主动请求最新状态
主题发送方接收方消息(JSON格式)消息含义
/光/
微信小程序
"{"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
日期:2023-07-30 浏览量:142
(微信小程序控制硬件第1篇)全网首发,借助emq消息服务器,轻松控制智能硬件!
日期:2023-07-30 浏览量:99