当前位置: 首页 > news >正文

旅游网站专业化建设的要点口碑营销案例2022

旅游网站专业化建设的要点,口碑营销案例2022,html5素材网站,国内知名网站制作公司此篇智能家居入门与前两篇类似#xff0c;但是是使用MQTT协议接入ONENET云平台#xff0c;实现微信小程序与下位机的通信#xff0c;这里相较于使用http协议的那两篇博客#xff0c;在主程序中添加了独立看门狗防止程序卡死和服务器掉线问题。后续还有使用MQTT协议连接MQTT… 此篇智能家居入门与前两篇类似但是是使用MQTT协议接入ONENET云平台实现微信小程序与下位机的通信这里相较于使用http协议的那两篇博客在主程序中添加了独立看门狗防止程序卡死和服务器掉线问题。后续还有使用MQTT协议连接MQTT服务器的智能家居项目。 前言一、硬件模块二、连接服务器测试三、两个协议的对比分析1、代码结构上2、获取服务器数据上3、架构上 四、下位机主要代码1、接收并解析云平台下发数据2、传感器数据上云 五、微信小程序主要代码1、index.js2、index.wxml 六、源码获取 前言 这里给出前两篇使用http协议博客的网址 ①实现数据上云https://blog.csdn.net/m0_71523511/article/details/135892908 ②实现小程序控制下位机https://blog.csdn.net/m0_71523511/article/details/135907645 在第二篇的博客结尾提出了服务器经常掉线的问题使用别人编写好的心跳包也没用因为程序一直卡死在重连中所以也可以参照本篇的解决办法加上独立看门狗隔一段时间喂狗如果超过时间没喂狗说明程序多半卡死此时看门狗处理逻辑中执行初始化esp8266和连接服务器的操作。 ③独立看门狗https://www.bilibili.com/video/BV1th411z7sn/?p46spm_id_frompageDrivervd_source2a10d30b8351190ea06d85c5d0bfcb2a ④由于使用到了MQTT协议想深入了解源码的话可以看看之前的的博客对MQTT协议进行详解https://blog.csdn.net/m0_71523511/article/details/135905690 一、硬件模块 1、0.96寸OLED液晶显示屏 2、DHT11温湿度传感器 3、继电器 4、小风扇、小水泵 5、MQ-4、MQ-9 6、esp8266-01s或者esp-12f 7、JLink下载器 8、STM32F103C8T6 大部分在上面说的第一篇博客中有介绍这里介绍一下继电器、小风扇、小水泵 ①继电器 由于单片机的io口无法直接驱动小风扇和水泵这里用继电器充当开关使用继电器驱动小风扇和小水泵运动。 输入端口外接5V电源黑色跳帽可以控制继电器是高电平触发还是低电平触发。 输出端口从左往右看分别是NO1/NO2,COM1/COM2,NC1/NC2代表常开公共端常闭三种状态。 继电器的两种状态开和关当继电器触发时为打开状态NOn口就会被使能当继电器为关闭状态时NCn口就会被使能中间作为公共端连接输出。 硬件连线 继电器输出端小风扇红黑两根线子红线接入继电器的NO1/NO2口继电器的COM1/COM2拿一根公母杜邦线引出来接入5V电源小风扇的黑线接STM32的GND口。 继电器输入端 原文链接https://blog.csdn.net/qq_51868810/article/details/127792611 ②小风扇、小水泵 这两个小东西就只有电源线和底线给5v输入即可转动起来 二、连接服务器测试 如果想单独先使用esp8266测试是否能正常与服务器通信的话可以参考这篇博客不会创建产品也可以看 https://blog.csdn.net/m0_71523511/article/details/135887108 需要注意的点 ①创建产品时要选择MQTT协议那个目录下进行创建 ②AT指令中的IP地址和端口号要换成183.230.40.39 6002 ③需要记住的有产品ID、鉴权信息创建产品时自己填写的、Master-APIkey、设备ID 三、两个协议的对比分析 1、代码结构上 相较于使用http协议连接onenet使用mqtt协议需要多几个源文件onenet.c、cJSON.c、MqttKit.c。 ①onenet.c是与onenet平台的数据交互接口层通过调用MqttKit.c和esp8266.c中的库函数实现与云平台的通信 ②MqttKit.c是MQTT协议库是MQTT协议最底层由onenet.c进行调用。前面两个都是大神张继瑞开源。 ③cJSON.c是一个用于处理JSON数据格式的轻量级C语言库JSONJavaScript Object Notation是一种轻量级的数据交换格式常用于在不同系统之间传输和存储数据。在对云平台下发数据进行解析时会用到onenet.c。 2、获取服务器数据上 ******使用http协议和MQTT协议连接onenet最大的不同就是获取onenet云平台数据的方式 http协议直接构建HTTP请求报文并调用esp8266_send_data函数发送HTTP请求并获取返回的字符串。 mqtt协议不主动发送请求使用ESP8266_WaitRecive函数等待如果云平台有数据下发那就存起来当作变量传入OneNet_RevPro函数进行消息解析。 3、架构上 请求/响应和发布/订阅是两种不同的通信模式它们在系统架构和通信方式上有所不同。 ①请求/响应 特点 在请求/响应模式中通信的一方发送请求而另一方回复响应。通信是单向的有一个明确的请求者和一个响应者。 用途 这种模式常见于客户端和服务器之间的通信。客户端发送请求服务器处理请求并返回相应的响应。 ②发布/订阅 特点 在发布/订阅模式中消息的发布者将消息发送到一个主题topic而订阅者可以选择订阅特定主题以接收相关消息。通信是多对多的发布者和订阅者之间是松耦合的。 用途 这种模式常见于事件驱动系统、消息中间件和实时数据更新场景。发布者发布消息到主题所有订阅该主题的订阅者都会收到消息。 由以上分析很容易得出一个结论在做环境信息检测这种实时数据更新的项目上使用MQTT协议更具优势。 四、下位机主要代码 1、接收并解析云平台下发数据 主循环中使用以下代码接收并跳转 dataPtr ESP8266_GetIPD(10);if(dataPtr ! NULL){timeCount 0;OneNet_RevPro(dataPtr);}接收到数据后跳转至onenet.c的OneNet_RevPro函数中进行mqtt数据包(报文)解包和数据解析 void OneNet_RevPro(unsigned char *cmd) {MQTT_PACKET_STRUCTURE mqttPacket {NULL, 0, 0, 0}; //协议包char *req_payload NULL;char *cmdid_topic NULL;unsigned short req_len 0;unsigned char type 0;short result 0;char *dataPtr NULL;char numBuf[10];int num 0;cJSON *json , *json_value;cJSON *json1, *json_value1;cJSON *json2, *json_value2;type MQTT_UnPacketRecv(cmd);switch(type){case MQTT_PKT_CMD: //命令下发OLED_Refresh_Line(jinru111);result MQTT_UnPacketCmd(cmd, cmdid_topic, req_payload, req_len); //解出topic和消息体if(result 0){//打印收到的信息printf( cmdid: %s, req: %s, req_len: %d\r\n, cmdid_topic, req_payload, req_len);// 对数据包req_payload进行JSON格式解析json cJSON_Parse(req_payload);if (!json)//如果json内容为空则打印错误信息printf(Error before: [%s]\n,cJSON_GetErrorPtr());else{json_value cJSON_GetObjectItem(json , LED0);//提取对应属性的数值if((json_value-valueint)1){GPIO_SetBits(GPIOB,GPIO_Pin_12); }else if((json_value-valueint)0) GPIO_ResetBits(GPIOB,GPIO_Pin_12); }//开关风扇json1 cJSON_Parse(req_payload);if (!json1)printf(Error before: [%s]\n,cJSON_GetErrorPtr());else{json_value1 cJSON_GetObjectItem(json1 , feng);if((json_value1-valueint)1)GPIO_SetBits(GPIOB,GPIO_Pin_5); else if((json_value1-valueint)0)GPIO_ResetBits(GPIOB,GPIO_Pin_5); }//开关水泵json2 cJSON_Parse(req_payload);if (!json2)printf(Error before: [%s]\n,cJSON_GetErrorPtr());else{json_value2 cJSON_GetObjectItem(json2 , shui);if((json_value2-valueint)1){GPIO_SetBits(GPIOB,GPIO_Pin_6); }else if((json_value2-valueint)0)GPIO_ResetBits(GPIOB,GPIO_Pin_6); }if(MQTT_PacketCmdResp(cmdid_topic, req_payload, mqttPacket) 0) //命令回复组包{printf( Tips: Send CmdResp\r\n);ESP8266_SendData(mqttPacket._data, mqttPacket._len); //回复命令MQTT_DeleteBuffer(mqttPacket); //删包}cJSON_Delete(json);//释放位于堆中cJSON结构体内存cJSON_Delete(json1);}break;case MQTT_PKT_PUBACK: //发送Publish消息平台回复的Ackif(MQTT_UnPacketPublishAck(cmd) 0)//printf( Tips: MQTT Publish Send OK\r\n);break;default:result -1;break;}ESP8266_Clear(); //清空缓存if(result -1)return;dataPtr strchr(req_payload, :); //搜索}if(dataPtr ! NULL result ! -1) //如果找到了{dataPtr;while(*dataPtr 0 *dataPtr 9) //判断是否是下发的命令控制数据{numBuf[num] *dataPtr;}numBuf[num] 0;num atoi((const char *)numBuf); //转为数值形式}if(type MQTT_PKT_CMD || type MQTT_PKT_PUBLISH){MQTT_FreeBuffer(cmdid_topic);MQTT_FreeBuffer(req_payload);} }2、传感器数据上云 主函数中读取传感器数值每隔一段时间上传 else if(timeCount 100) //发送间隔{DHT11_Read_Data(tempValue,humidity);gas AD_GetValue(ADC_Channel_2);ranqi AD_GetValue(ADC_Channel_3);delay_ms(10);OneNet_SendData();//发送数据给onenetESP8266_Clear(); timeCount 0;}调用OneNet_SendData发送数据在OneNet_SendData函数中又调用OneNet_FillBuf函数将要发送的数据拼接起来。 unsigned char OneNet_FillBuf(char *buf) {char text[32];//LED0_FLAGGPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12);//读取LED的开关状态即对应引脚的//LED1_FLAGGPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);memset(text, 0, sizeof(text));strcpy(buf, ,;);memset(text, 0, sizeof(text));sprintf(text, Tempreture,%d;,tempValue);strcat(buf, text);memset(text, 0, sizeof(text));sprintf(text, Humidity,%d;, humidity);strcat(buf, text);memset(text, 0, sizeof(text));sprintf(text, tianranqi,%d;, gas);strcat(buf, text);memset(text, 0, sizeof(text));sprintf(text, keranqiti,%d;, ranqi);strcat(buf, text);printf(buf_mqtt%s\r\n,buf);return strlen(buf);}// // 函数名称 OneNet_SendData // // 函数功能 上传数据到平台 // // 入口参数 type发送数据的格式 // // 返回参数 无 // // 说明 // void OneNet_SendData(void) {MQTT_PACKET_STRUCTURE mqttPacket {NULL, 0, 0, 0}; //协议包char buf[128];short body_len 0, i 0;//printf( Tips: OneNet_SendData-MQTT\r\n);memset(buf, 0, sizeof(buf));//清空数组内容body_len OneNet_FillBuf(buf); //获取当前需要发送的数据流的总长度if(body_len){if(MQTT_PacketSaveData(DEVID, body_len, NULL, 5, mqttPacket) 0) 数据点上传组包将数据封装成mqtt协议所要求的数据包格式{{for(; i body_len; i)mqttPacket._data[mqttPacket._len] buf[i];ESP8266_SendData(mqttPacket._data, mqttPacket._len); //上传数据到平台printf( Send %d Bytes\r\n, mqttPacket._len);MQTT_DeleteBuffer(mqttPacket); //删包}else{printf( WARN: EDP_NewBuffer Failed\r\n);}}}五、微信小程序主要代码 图中圈起来的地方需要根据自己的数据进行填写在下面的调试信息栏可以看到有数据上传查看数据流即可 1、index.js 主要是增加了控制风扇和水泵的代码 feng_kai:function(){//按钮发送命令控制硬件wx.request({url:https://api.heclouds.com/cmds?device_id1108129261,header: {content-type: application/json,api-key:nV4Cso3uQMZR2EGQQiY49MRCfx8},method: POST,data:{feng:1},success(res){console.log(成功,res.data)},fail(res){console.log(失败,res)}}) },feng_guan:function(){//按钮发送命令控制硬件wx.request({url:https://api.heclouds.com/cmds?device_id1108129261,header: {content-type: application/json,api-key:nV4Cso3uQMZR2EGQQiY49MRCfx8},method: POST,data:{feng:0},success(res){console.log(成功,res.data)},fail(res){console.log(失败,res)}}) },shui_kai:function(){//按钮发送命令控制硬件wx.request({url:https://api.heclouds.com/cmds?device_id1108129261,header: {content-type: application/json,api-key:nV4Cso3uQMZR2EGQQiY49MRCfx8},method: POST,data:{shui:1},success(res){console.log(成功,res.data)},fail(res){console.log(失败,res)}}) },shui_guan:function(){//按钮发送命令控制硬件wx.request({url:https://api.heclouds.com/cmds?device_id1108129261,header: {content-type: application/json,api-key:nV4Cso3uQMZR2EGQQiY49MRCfx8},method: POST,data:{shui:0},success(res){console.log(成功,res.data)},fail(res){console.log(失败,res)}}) },需要注意的是这里的url需要更换成‘https://api.heclouds.com/cmds?device_id11081xxxxxx’并且文件开头的apikey和设备号也要换成自己的。 2、index.wxml 最后加上 button typeprimary stylemargin-top: 20px; bindtapfeng_kai开风扇/button button typewarn bindtapfeng_guan关风扇/buttonbutton typeprimary stylemargin-top: 20px; bindtapshui_kai开水泵/button button typewarn bindtapshui_guan关水泵/button六、源码获取 我用夸克网盘分享了「智能家居MQTTONENET.rar」点击链接即可保存。打开「夸克APP」无需下载在线播放视频畅享原画5倍速支持电视投屏。 链接https://pan.quark.cn/s/db251fd599bd 提取码9sR9
http://www.pierceye.com/news/751315/

相关文章:

  • 白银市建设管理处网站定制网站建设和运营
  • 免费音乐网站建设新闻资讯建站服务商
  • 佛山市建设企业网站服务机构普通网站建设计入什么科目
  • 阿里虚拟机建设网站网络科技有限公司营业执照
  • 如何申请建设网站首页培训机构怎么做线上推广
  • 网站维护升级访问中做网站工单
  • 如何用ae做模板下载网站电脑网站建设规划
  • 北京京水建设集团有限公司网站西青做网站
  • 自己建的网站可以用笔记本做服务器吗网站建设后台系统有哪些
  • 做的asp网站手机号码网站开发软件手机版
  • android 做电子书下载网站网络热词作文
  • 网络网站销售龙岩建筑网
  • 专门找事做的网站iis7 wordpress伪静态规则
  • 做字体的网站济宁网站建设 济宁智雅
  • 工程门户网站建设怎样制作表白网站
  • 手机如何创建个人网站上海 .net网站建设
  • 小程序app软件定制开发首页排名优化公司
  • 红酒 专业 网站建设视频网站后台
  • 宁波网站建设58同城百度突然搜不到网站
  • 网站开发技术和seo的联系wordpress发邮件卡主
  • 网站开发安全模块方案网站运营方案怎么写?
  • 章丘网站制作手机网站 微信平台
  • 自定义功能的网站做坏事网站
  • 做农村电子商务的网站有哪些wordpress批量修改引用网址
  • 简述建立网站的步骤内蒙古建设监理协会网站
  • 网站上传格式工信部 网站备案查询
  • 网站开发怎么让别人看到网站设计主流尺寸
  • 都匀经济开发区建设局网站华宇网站建设
  • 南谯区住房和城乡建设局网站大连百度推广优化
  • 东莞设计网站公司被邀请做刷客会不会碰到钓鱼网站