7099|18

356

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

微信排插(自己搭建服务器HTML5) [复制链接]

 
本帖最后由 ihalin 于 2017-5-4 22:13 编辑

接着上次玩玩微信物联网直连控制LED灯(不需要自己搭建服务器)
https://bbs.eeworld.com.cn/thread-495038-1-1.html这次是使用自己的服务器 微信+MQTT服务器+ HTML5
这次给自己DIY一个微信排插,这样就可以躺在床上控制各种电器了。比如我控制我的普通台灯,风扇啥的。



上视频:

微信端配置 不使用微信官方的控制面板,而是用自己服务器写的HTML5,填写自己的HTML5服务器地址

然后手机微信扫描绑定二维码,绑定设备
然后微信的设置里面打开设备就可以控制排插了

HTML5界面代码:
  1. <!DOCTYPE html>
  2. <html>

  3. <head>

  4.   <meta charset="UTF-8">

  5.   <title>物联网</title>

  6.   <style>
  7. /*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}

  8. </style>

  9.     <style>
  10. *, *:before,
  11. *:after {
  12.   box-sizing: border-box;
  13. }

  14. html {
  15.   font-family: 'Roboto Condensed', sans-serif;
  16.   display: flex;
  17.   justify-content: center;
  18.   align-items: center;
  19.   text-align: center;
  20.   height: 100%;
  21.   color: #ECEFF1;
  22.   background-image: radial-gradient(#4f6875, #263238);
  23. }

  24. .toggle {
  25.   position: relative;
  26.   display: block;
  27.   margin: 0 auto;
  28.   width: 150px;
  29.   height: 60px;
  30.   color: white;
  31.   outline: 0;
  32.   text-decoration: none;
  33.   border-radius: 100px;
  34.   border: 2px solid #546E7A;
  35.   background-color: #263238;
  36.   transition: all 500ms;
  37. }
  38. .toggle:active {
  39.   background-color: #1c2429;
  40. }
  41. .toggle:hover:not(.toggle--moving):after {
  42.   background-color: #455A64;
  43. }
  44. .toggle:after {
  45.   display: block;
  46.   position: absolute;
  47.   top: 4px;
  48.   bottom: 4px;
  49.   left: 4px;
  50.   width: calc(50% - 4px);
  51.   line-height: 45px;
  52.   text-align: center;
  53.   text-transform: uppercase;
  54.   font-size: 20px;
  55.   color: white;
  56.   background-color: #37474F;
  57.   border: 2px solid;
  58.   transition: all 500ms;
  59. }

  60. .toggle--on:after {
  61.   content: 'On';
  62.   border-radius: 50px 5px 5px 50px;
  63.   color: #66BB6A;
  64. }

  65. .toggle--off:after {
  66.   content: 'Off';
  67.   border-radius: 5px 50px 50px 5px;
  68.   transform: translate(100%, 0);
  69.   color: #f44336;
  70. }

  71. .toggle--moving {
  72.   background-color: #1c2429;
  73. }
  74. .toggle--moving:after {
  75.   color: transparent;
  76.   border-color: #435862;
  77.   background-color: #222c31;
  78.   transition: color 0s, transform 500ms, border-radius 500ms,           background-color 500ms;
  79. }

  80. h1 {
  81.   font-size: 64px;
  82.   margin-top: 0;
  83.   margin-bottom: 50px;
  84. }

  85. </style>

  86. <script src="js/prefixfree.min.js"></script>

  87. </head>

  88. <body>
  89.   <h1>排插</h1>
  90.   <a id="bt" class="toggle  toggle--off" value='0'></a>
  91.   <script src="js/bmqtt.js"></script>
  92.   <script src='js/jquery.js'></script>
  93.   <script src="js/index.js"></script>

  94. </body>

  95. </html>
复制代码


JS代码
自己用的是MQTT来控制的
  1. var client = mqtt.connect('ws://www.iotsj.cn:8083/mqtt'); // you add a ws:// url here
  2. client.subscribe("/mqtt/rev");//订阅
  3.       client.on("message", function(topic, payload) {
  4.         // alert([topic, payload].join(": "));
  5.       });
  6. client.publish("/mqtt/send", "g"); //发送

  7. $('#bt').click(function(e) {
  8.   var toggle = this;
  9.   var k =  $("#bt").attr('value');
  10.   if(k==0)
  11.   {
  12.         $(toggle).toggleClass('toggle--on').toggleClass('toggle--off').addClass('toggle--moving');
  13.     $("#bt").attr('value','1');
  14.     client.publish("/mqtt/send", "k");
  15. }

  16.   if(k==1)
  17.   {
  18.         $(toggle).toggleClass('toggle--on').toggleClass('toggle--off').addClass('toggle--moving');
  19.     $("#bt").attr('value','0');
  20.     client.publish("/mqtt/send", "g");
  21. }


  22.   setTimeout(function() {
  23.     $(toggle).removeClass('toggle--moving');
  24.   }, 200);
  25. });
复制代码




MCU(esp8266)代码:
  1. /* main.c -- MQTT client example
  2. #include "ets_sys.h"
  3. #include "driver/uart.h"
  4. #include "osapi.h"
  5. #include "mqtt.h"
  6. #include "wifi.h"
  7. #include "config.h"
  8. #include "debug.h"
  9. #include "gpio.h"
  10. #include "user_interface.h"
  11. #include "mem.h"

  12. MQTT_Client mqttClient;

  13. int temp=0;


  14. void wifiConnectCb(uint8_t status)
  15. {
  16.         if(status == STATION_GOT_IP){
  17.                 MQTT_Connect(&mqttClient);
  18.         } else {
  19.                 MQTT_Disconnect(&mqttClient);
  20.         }
  21. }
  22. void mqttConnectedCb(uint32_t *args)
  23. {
  24.         MQTT_Client* client = (MQTT_Client*)args;
  25.         INFO("MQTT: Connected\r\n");
  26.         MQTT_Subscribe(client, "/mqtt/men", 0);

  27.         //MQTT_Publish(client, "/mqtt/topic/0", "hello0", 6, 0, 0);

  28. }

  29. void mqttDisconnectedCb(uint32_t *args)
  30. {
  31.         MQTT_Client* client = (MQTT_Client*)args;
  32.         INFO("MQTT: Disconnected\r\n");
  33. }

  34. void mqttPublishedCb(uint32_t *args)
  35. {
  36.         MQTT_Client* client = (MQTT_Client*)args;
  37.         INFO("MQTT: Published\r\n");
  38. }

  39. void mqttDataCb(uint32_t *args, const char* topic, uint32_t topic_len, const char *data, uint32_t data_len)
  40. {
  41.         char *topicBuf = (char*)os_zalloc(topic_len+1),
  42.                         *dataBuf = (char*)os_zalloc(data_len+1);
  43.         int i=0;
  44.         MQTT_Client* client = (MQTT_Client*)args;

  45.         os_memcpy(topicBuf, topic, topic_len);
  46.         topicBuf[topic_len] = 0;

  47.         os_memcpy(dataBuf, data, data_len);
  48.         dataBuf[data_len] = 0;

  49.         INFO("Receive topic: %s, data: %s \r\n", topicBuf, dataBuf);
  50. //    if(dataBuf[0]=='k')//排插指令--开
  51. //    {
  52. //            GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 1);
  53. //            INFO("paicha is open  ");
  54. //
  55. //    }
  56. //    else if(dataBuf[0]=='g')//--关
  57. //    {
  58. //            GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 0);
  59. //            INFO("paicha is close  ");
  60. //    }
  61.     if(dataBuf[0]=='o')
  62.     {
  63.             GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 1);//GPIO14输出低电平
  64.             INFO("meng k ai le");
  65.     }
  66.     else if(dataBuf[0]=='c')
  67.     {
  68.             GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 0);//GPIO14输出低电平
  69.             INFO("meng is close  ");
  70.     }

  71.         os_free(topicBuf);
  72.         os_free(dataBuf);
  73. }


  74. /******************************************************************************
  75. * FunctionName : user_rf_cal_sector_set
  76. * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
  77. *                We add this function to force users to set rf cal sector, since
  78. *                we don't know which sector is free in user's application.
  79. *                sector map for last several sectors : ABCCC
  80. *                A : rf cal
  81. *                B : rf init data
  82. *                C : sdk parameters
  83. * Parameters   : none
  84. * Returns      : rf calf sector
  85. *******************************************************************************/
  86. uint32 ICACHE_FLASH_ATTR
  87. user_rf_cal_sector_set(void)
  88. {
  89.     enum flash_size_map size_map = system_get_flash_size_map();
  90.     uint32 rf_cal_sec = 0;
  91.    
  92.     switch (size_map) {
  93.         case FLASH_SIZE_4M_MAP_256_256:
  94.             rf_cal_sec = 128 - 5;
  95.             break;
  96.             
  97.         case FLASH_SIZE_8M_MAP_512_512:
  98.             rf_cal_sec = 256 - 5;
  99.             break;
  100.             
  101.         case FLASH_SIZE_16M_MAP_512_512:
  102.         case FLASH_SIZE_16M_MAP_1024_1024:
  103.             rf_cal_sec = 512 - 5;
  104.             break;
  105.             
  106.         case FLASH_SIZE_32M_MAP_512_512:
  107.         case FLASH_SIZE_32M_MAP_1024_1024:
  108.             rf_cal_sec = 1024 - 5;
  109.             break;
  110.             
  111.         default:
  112.             rf_cal_sec = 0;
  113.             break;
  114.     }
  115.    
  116.     return rf_cal_sec;
  117. }

  118. //定时器回调函数
  119. void timer_callback(args)
  120. {
  121.         uint32_t result;
  122.         result = GPIO_INPUT_GET(GPIO_ID_PIN(4));
  123.         if(result == 0x01)
  124.         {

  125.                 MQTT_Publish(&mqttClient, "/mqtt/menrev", "kaimen", 6, 0, 0);
  126.         }
  127.         else
  128.         {

  129.                 //MQTT_Publish(&mqttClient, "/mqtt/rev", "kaimen", 6, 0, 0);
  130.         }

  131. }

  132. void user_init(void)
  133. {
  134.         //定义定时器结构体
  135.         LOCAL os_timer_t timer;

  136.         uart_init(115200,115200);
  137.         os_delay_us(1000000);



  138.         os_timer_disarm(&timer);//关闭定时器,相当于清零计时器计数
  139.         os_timer_setfn(&timer, (os_timer_func_t *)timer_callback, NULL);//初始化定时器
  140.         os_timer_arm(&timer, 5000, 1);//开始定时器计数,1000毫秒后,会调用前面的callback函数 (后面的0表示只运行一次 为1表示循环运行)




  141.     PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5);//D1
  142.     GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 0);

  143.         PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14);//D5 输出控制
  144.         GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 0);//D5输出低电平默认不亮的

  145.         PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);//D2输入
  146.         GPIO_DIS_OUTPUT(GPIO_ID_PIN(4)) ; // 设置GPIO4为输入


  147.         CFG_Load();

  148.         MQTT_InitConnection(&mqttClient, sysCfg.mqtt_host, sysCfg.mqtt_port, sysCfg.security);
  149.         //MQTT_InitConnection(&mqttClient, "192.168.11.122", 1880, 0);

  150.         MQTT_InitClient(&mqttClient, sysCfg.device_id, sysCfg.mqtt_user, sysCfg.mqtt_pass, sysCfg.mqtt_keepalive, 1);
  151.         //MQTT_InitClient(&mqttClient, "client_id", "user", "pass", 120, 1);

  152.         MQTT_InitLWT(&mqttClient, "/lwt", "offline", 0, 0);
  153.         MQTT_OnConnected(&mqttClient, mqttConnectedCb);
  154.         MQTT_OnDisconnected(&mqttClient, mqttDisconnectedCb);
  155.         MQTT_OnPublished(&mqttClient, mqttPublishedCb);
  156.         MQTT_OnData(&mqttClient, mqttDataCb);

  157.         WIFI_Connect(sysCfg.sta_ssid, sysCfg.sta_pwd, wifiConnectCb);

  158.         INFO("\r\nSystem started ...\r\n");
  159. }
复制代码




此帖出自stm32/stm8论坛

最新回复

Mqtt你用的那个库   详情 回复 发表于 2017-8-4 15:00

赞赏

1

查看全部赞赏

点赞 关注(5)
 

回复
举报

6423

帖子

16

TA的资源

版主

沙发
 
只能在局域网使用吗?
此帖出自stm32/stm8论坛

点评

已连接服务器的 ,4G,wifi都,用微信来控制的。  详情 回复 发表于 2017-5-4 21:33
 
个人签名training
 

回复

356

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
白丁 发表于 2017-5-4 21:19
只能在局域网使用吗?

已连接服务器的 ,4G,wifi都,用微信来控制的。
此帖出自stm32/stm8论坛
 
 

回复

578

帖子

0

TA的资源

纯净的硅(初级)

4
 
此帖出自stm32/stm8论坛
 
个人签名刻苦学习,共同进步
 
 

回复

360

帖子

0

TA的资源

纯净的硅(初级)

5
 
此帖出自stm32/stm8论坛
 
 
 

回复

1025

帖子

1

TA的资源

一粒金砂(高级)

6
 
很牛的东西啊
此帖出自stm32/stm8论坛
 
 
 

回复

862

帖子

2

TA的资源

纯净的硅(初级)

7
 
此帖出自stm32/stm8论坛
 
个人签名水不撩不知深浅 人不拼怎知输赢
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

8
 
你这个服务器是自己买的还是申请的免费的呢?不错
此帖出自stm32/stm8论坛

点评

腾讯云的学生机子  详情 回复 发表于 2017-5-5 09:54
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

356

帖子

0

TA的资源

一粒金砂(中级)

9
 
wateras1 发表于 2017-5-5 09:41
你这个服务器是自己买的还是申请的免费的呢?不错

腾讯云的学生机子
此帖出自stm32/stm8论坛

点评

这个可以试用多久呢?有链接嘛?  详情 回复 发表于 2017-5-5 10:01
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

10
 
ihalin 发表于 2017-5-5 09:54
腾讯云的学生机子

这个可以试用多久呢?有链接嘛?
此帖出自stm32/stm8论坛

点评

不是试用的 是1块钱 一个月  详情 回复 发表于 2017-5-5 19:33
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

11
 
此帖出自stm32/stm8论坛
 
 
 

回复

356

帖子

0

TA的资源

一粒金砂(中级)

12
 
wateras1 发表于 2017-5-5 10:01
这个可以试用多久呢?有链接嘛?

不是试用的 是1块钱 一个月
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

13
 
这个还要连接电脑的吗,你这块控制开关的板子是放在哪里,一起放在插座里的吗?
此帖出自stm32/stm8论坛

点评

在插座里面  详情 回复 发表于 2017-5-6 11:12
 
 
 

回复

356

帖子

0

TA的资源

一粒金砂(中级)

14
 
贵在坚持 发表于 2017-5-6 07:35
这个还要连接电脑的吗,你这块控制开关的板子是放在哪里,一起放在插座里的吗?

在插座里面
此帖出自stm32/stm8论坛
 
 
 

回复

994

帖子

3

TA的资源

一粒金砂(高级)

15
 
此帖出自stm32/stm8论坛
 
 
 

回复

1706

帖子

4

TA的资源

纯净的硅(初级)

16
 
哟哟。6666666666666666666666666
此帖出自stm32/stm8论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

17
 
你好。请问我现在需要开发一个产品。用微信连接。需要使用自己的服务器吗??、
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

18
 
你加个好友吗,我最近在准备这个。有的地方不懂qq1156488130
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

19
 
Mqtt你用的那个库





此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表