微信硬件平台

本文目的,使用微信公众号控制ESP8266的LED开和关。进一步使用微信当遥控器(避免写APP或者IOS或者小程序),控制一切设备。给两个关键的总教程参考。

作为个人DIY开始使用者可入门,作为商用需要开发更多的东西才能使用。

官方产品视频 https://v.qq.com/x/page/j0170txx5eb.html

目前整体测试效果

打开微信,关注自己的公众号

      

功能结构图

1 公众号注册

  1. 1.申请认证公众号&开通设备功能
  2. 1.1公众号申请: https://mp.weixin.qq.com

  1.  

个人订阅号   

功能有限,不能有设备管理模块功能,本教程系列使用的是订阅号,做一个测试足够了。

企业服务号

注册必须要有公司信息,法人等组织代码,个人用不了。  某宝上可以买个临时用下测试。

可以拥有设备管理功能,简单来说可以生产100个设备(例如大气传感器),每个用户可以对应自己的设备

2 自己的服务器搭建

2-0购买新服务器

服务器选择有很多,国内的腾讯云、阿里云、百度云,美团云、美橙云等等,阿里云算是国内一家独大的了,但都价格较贵吧。
国外比较推荐的有:

  • Vultr 1核1G内存1T流量 $5/月,(也有2.5$的套餐,但是没货买不到),新人注册使用Paypal充值10刀送25刀,真的很优惠。。。
  • BandwagonHost(搬瓦工VPS) 1核512M内存500G流量$19.9/年,良心价,我要买的时候没货。。。
  • DigitalOcean 和vultr差不多的价格。
    更多对比请看知乎

我最后选择了Vultr,东京机房,Centos7,速度方面可以访问一下我博客感受下,具体购买流程请看:vultr中文网
购买前先注册一个PayPal账户,绑定银行卡充值10$,就可以领取25$的优惠了(有些银行需要信用卡,有些不用,我最后用建设银行的借记卡可以)。

2-1服务器搭建

第一种方案  阿里云服务器搭建

必须报备后才能使用80端口网页服务功能,其实报备也很快,但是嫌麻烦没使用。

第二种方案

找个外国的服务器,没有报备的限制。

本教程使用的外网服务器

https://my.vultr.com

自己买一个。

这里教程是centos6系统镜像

2-2 开放服务器端口

和微信服务器交互,我们需要80或443端口,服务器端口默认需要开启,才能被外界访问。

第一层,登陆网页服务器管理界面添加安全组

阿里云如何添加安全组开放端口

参考教程 自己搜

本教程使用的vultr外网服务器如何开启端口

参考教程 腾讯云服务器迁移到Vultr

  • Vultr的vps其实需要更改两处地方,相当于双层防护。
  • 一是Vultr官网控制台的防火墙策略组,默认阻止所有访问。
  • 二是系统内默认安装的firewall。
  • 需要配置好这两处地方,才能开放端口让你的网站可以被访问。我这里将要开启的是80端口提供Web服务,22端口ssh远程访问。

点击Add Firewall Group,需要给个描述,随便就好,在IPv4的标签下添加80和22的规则。

IPV6的模块可以先不管,然后在Linked Instances中绑定当前的vps。

至此,vps已开启80端口,22端口也是必须的(shell远程登录)。

按照这个教程我无法修改防火墙开启端口,估计是系统版本不一样。就采用了下面暴力的办法。

第二层 ,系统(centos6)本身的防火墙开启端口(测试阶段粗暴地关了防火墙)

打开防火墙:service iptables start

关闭防火墙:service iptables stop

查看防火墙状态:service iptables status

(重启后还得关一次防火墙???)

永久开启防火墙: chkconfig iptables on

永久关闭防火墙:chkconfig iptables off

查看状态:chkconfig --list iptables

登录服务器

3 搭建Web服务器(apache + php + mysql)

centos6系统下,搭建Web服务器(apache + php + mysql)

教程

安装apache

安装yum install httpd

启动service httpd start
暂停service httpd stop
重启service httpd restart

检查开机启动情况chkconfig --list httpd
默认情况下是全部关闭的,尽量设置开机启动,以防主机意外关机

设置开机启动命令chkconfig httpd on
再次检查启动情况,看到2,3,4,5为启动
关闭开机启动命令chkconfig httpd off

到此Apache安装完成,在自己浏览器中输入主机IP和端口号能正常打开

(不能打开重启下服务器)

Apache的默认网站根目录

/var/www/html

配置文件路径

/etc/httpd/conf/httpd.conf

安装php

  1. yum install php
  2. yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
  3. yum install php-mysql

  

  1. 以上命令为安装php及其支持的组件
  2.  
  3. 测试是否安装成功
    在这个文件夹下,创建一个info.php文件
  1. vi /var/www/html/info.php
    (不喜欢vi命令编辑的,可以把文件拖到windos上修改,后再复制过去)
  1. <html>
  2. <body>
  3. <h1>It's work!</h1>
  4. <?php
  5. echo 'HELLO WORLD';
  6. phpinfo();
  7. ?>
  8. </body>
  9. </html>

  

  1. 重启Apache服务器
  2.  
  3. 在浏览器地址栏访问:http://自己的服务器IP/info.php
  1.  

安装mysql

安装

首先查看主机是否已经安装

rpm -qa|grep mysql

注意:可能检查中安装有php-mysql XXXXX 和 mysql-libXXXX,这是刚刚第二步安装的php的组件,不必理会

已经安装的话就执行删除命令

yum remove mysql
rm -f /etc/my.cnf

然后继续安装
使用命令

yum list | grep mysql
来查看yum上提供的mysql数据库可下载的版本

安装命令

yum install -y mysql-server mysql mysql-devel
等待一段时间安装成功

配置

接下来是对mysql的配置(注意:命令中是”mysqld”,不是mysql)

初始化:

service mysqld start
重启:

service mysqld restart
配置开机自动启动:

chkconfig mysqld on

为mysql的root账户设置密码:

mysqladmin -u root password '*********'

改密码后要重启Mysql服务器

登录命令

mysql -u root -p

配置Apache使其支持PHP

教程 https://blog.csdn.net/qq_25371579/article/details/78476186

需要在httpd.conf中添加以下代码,修改后重启Apache服务

把这个文件拖到windons上,修改

添加

  1. LoadModule php5_module modules/libphp5.so
  2.  
  3. AddType application/x-httpd-php .php
  4. AddType application/x-httpd-php-source .phps

然后文件重新复制回去,修改后重启Apache服务

装MySql图形管理界面phpMyAdmin

从官网上下载下来(注意版本号,看是否支持本机的MySql和PHP),直接放在网站根目录下,在浏览器中输入相应的地址就可以访问,登陆后即可管理

https://blog.csdn.net/programmer_wei/article/details/45888835

  1. #安装phpmyadmin
  2. yum -y install phpmyadmin
  3. yum install php-mcrypt

phpmyadmin默认只能使用http://localhost/phpmyadmin来访问,可以修改/etc/httpd/conf.d/phpmyadmin.conf中对应部分为

  1. <Directory "/usr/share/phpmyadmin">
  2. Order Deny,Allow
  3. #  Deny from all
  4. Allow from All
  5. </Directory>

phpMyAdmin 的默认安装目录是 /usr/share/phpMyAdmin,同时会在 Apache 的配置文件目录中自动创建虚拟主机配置文件 /etc/httpd/conf.d/phpMyAdmin.conf (区分大小写)。

  1. vi /etc/httpd/conf.d/phpmyadmin.conf
  1. #Alias /phpMyAdmin /usr/share/phpMyAdmin
  2. #Alias /phpmyadmin /usr/share/phpMyAdmin

里面的

  1. Require ip 127.0.0.1
  2. Require ip ::1

改成

  1. Require all granted

为该目录创建符号连接到 phpMyAdmin 安装目录(/usr/share/phpMyAdmin):

  1. ln -sf /usr/share/phpMyAdmin /var/www/html/phpmyadmin
  1. [root@localhost ~]# service httpd restart

测试,在网页里输入自己的服务器的IP,自动跳转php测试样例

http://localhost/phpmyadmin

至此网页服务器搭建完毕

4 配置微信SDK

1下载SDK 

链接:https://pan.baidu.com/s/1YKzOOqNxUyGiso4SlyAc5g
提取码:tn4x

2 将SDK放在服务器下

注意路径,后面配置微信公众号需要用到,不能出错。

/var/www/html/WeChat

5 配置微信公众号

 5-1 个人申请订阅号做的测试

  1. 公众号申请: https://mp.weixin.qq.com

订阅号是不用交钱的,就目前我们控制LED订阅号是足够了的

  1. 订阅号公众号设置
    公众号申请好之后登陆,然后进行开发者设置。

  1.  
    说明:

    服务器路径一定要填写对,是微信SDK文件下的的index.php
    /var/www/html/WeChat
    对应填写 服务器IP+/WeChat/index.php

不是/var/www/html/下面的index.php(安装网页服务器的测试网页)

根据实际的sdk路径填写地址。

看上图填写完成之后就点击提交,不出意外就显示提交成功。成功后如上图

6 测试

打开微信,关注自己的公众号

现有功能是

7 微信SDK服务分析

核心代码解析

核心代码解

这里推荐使用PHPStorm,可以有智能提示,可以追踪函数实现等。当然你用其他工具也可以。

  1. <?php
  2. require('wechat/Wechat.php');
  3. class TestWechat extends Wechat {
  4. /**
  5. * 收到文本消息时触发,回复收到的文本消息内容
  6. *
  7. * @return void
  8. */
  9. protected function onText()
  10. {
  11. $this->responseText('收到了文字消息:' . $this->getRequest('content'));
  12. }
  13. }
  14.  
  15. $wechat = new TestWechat(array(
  16. 'token' => 'weixin',
  17. 'aeskey' => 'xxx',
  18. 'appid' => 'xxx',
  19. 'debug' => true
  20. ));
  21. $wechat->run();[/kenrobot_code]

   这个是库里面自带的例子,功能就是你给你的公众号发个内容,他在前面加上  收到了文字消息:  
          我们重点看看onText函数。这个函数里面有两个函数。

  1. $this->responseText(参数是字符串)这个就是给你回复。
  2. $this->getRequest('content'))这个就是解析你发送来的文字消息返回值是字符串。

  

8 微信控制LED  对接硬件ESP8266

原教程给的是通过把微信发来的消息保存成txt文件,然后ESP8266不断请求这个txt文件,获取内容判断然后做出开关灯命令。

原教程

-------------------------------------------------------------------------------------

作为一个测试足够了,但是后期多用户访问时候,如下问题:

1 涉及身份识别和产品用户绑定问题.

大白要查询和控制自己的安防开关,首先服务器要知道是大白发来的请求,其次还要根据产品唯一ID找到大白绑定的设备。不能把小明的触感器数据发过去。

企业申请的服务号具备这个功能。,例如

https://iot.weixin.qq.com/wiki/new/index.html?page=5-5

智能空调的产品需求及接入微信硬件云实施方案:

  1. ●用户用微信配置设备联网&绑定
  2. 方案一(推荐):设备上张贴“每种型号唯一的二维码”,用户扫码后通过Airkiss配网并绑定设备(http://iot.weixin.qq.com/wiki/new/index.html?page=4-6
  3. 方案二:设备上张贴“每个产品唯一的二维码”+用户扫码后绑定设备+进入公众号再通过Airkiss配网
  4. ●空调遥控器
  5. 方案一:厂家利用微信提供的标准控制模板,链入公众号菜单
  6. 方案二:厂家自己开发的H5控制页面,链入公众号菜单
  7. ●空调售后服务
  8. 方案:厂家开发H5页面,链入公众号菜单
    -------------------------------------------------------------------------------------
    用微新给服务器发送字符串"ON"服务器检测收到字符串"ON"之后就生成一个txt文件,并将“ON”写入到txt文件。然后ESP8266不断请求这个文件内容检测到是ON就开灯。OFF就关灯。
      思路就是这样。那下来开始动手做。方式PHP代码。
  1. <?php
  2. require('wechat/Wechat.php');
  3. class TestWechat extends Wechat {
  4. /**
  5. * 收到文本消息时触发,回复收到的文本消息内容
  6. *
  7. * @return void
  8. */
  9. protected function onText()
  10. {
  11.  
  12. $state=$this->getRequest('content');
  13. if($state=="ON" ||$state=="OFF")
  14. {
  15. $file=fopen("1.txt","w")or die("failed!");
  16. //这一行就是将ON或者OFF以覆盖方式写入1.txt
  17. fwrite($file,$state);
  18. fclose($file);
  19. }
  20. $this->responseText('主人好,我收到你的消息:' . $this->getRequest('content'));
  21. }
  22. }
  23.  
  24. $wechat = new TestWechat(array(
  25. 'token' => 'weixin',
  26. 'aeskey' => 'xxx',
  27. 'appid' => 'xxx',
  28. 'debug' => true
  29. ));
  30. $wechat->run();

  

  

  1. 运行到打开1.txt文件的时候,显示没有文件读取和写的权限。
  2.  
  3. 发现用记事本创建的1.txt只有读权限,没有写入的权限,好吧问题出在这呢,给1.txt文件提升写的权限吧:
    给与权限(来到根目录下)
  1. cd ..
    ls #查看确认/var路径出现
    sudo chmod 666 /var/www/html/WeChat/1.txt

再次发送消息,OK解决了!

如图。我们成功实现了微信来控制txt内容。那么下面只需要用ESP8266来不断请求这个txt的内容就好。

9 微信控制ESP8266,硬件程序烧录

我们采用arduino IDE方式来编写ESP82662的代码。具体的IDE设置请参照 大佬的教程

版型选择参数

串口找不到更新下USB串口驱动

直接烧写到ESP8266里面就好了

  1. #include <ESP8266WiFi.h>
  2.  
  3. const char *ssid = "dongdong";//WIFI账号
  4. const char *password = "********";//WIFI密码
  5. const char *host = "192.168.1.1";//服务器地址 公网IP或域名
  6. const int tcpPort = 80;//服务器端口号
  7.  
  8. WiFiClient sclient;
  9. int pinled = D4; // LED灯在D4引脚口 板载测试LED
  10.  
  11. void setup()
  12. {
  13. Serial.begin(115200); //串口波特率
  14. Serial.setTimeout(100);
  15. WiFi.begin(ssid, password); // 链接WIFI
  16. pinMode(pinled, OUTPUT); //LED引脚初始化,输出模式
  17. while (WiFi.status() != WL_CONNECTED)//查看WIFI链接状态
  18. {
  19. Serial.println("try connect");
  20. delay(500);
  21. }
  22.  
  23. }
  24.  
  25. void loop()
  26. {
  27. connecttoserver(); // 链接服务器
  28. sendtoserver(); // 请求网页服务器文件夹路径下 /WeCchat/1.txt文件,
  29. if (sclient.available())
  30. {
  31. String str = sclient.readStringUntil('\r'); // 读一行
  32. Serial.println(str); //串口打印出来
  33. if (str.indexOf("ON") >= 0)
  34. {
  35. digitalWrite(pinled, 0);// 开D4口,板载电路设计,给低电平LED亮,其他口和其他自己外接的LED反过来 1是开
  36. }
  37. else if (str.indexOf("OFF") >= 0)
  38. {
  39. digitalWrite(pinled, 1);
  40. }
  41. }
  42. delay(500) ;
  43. }
  44. void sendtoserver()
  45. {
  46. String str = "GET /WeChat/1.txt\r\n\r\n\r\n"; // GET 请求网页服务器默认文件夹下的文件。 根据实际路径设置
  47. sclient.print(str);
  48.  
  49. }
  50. void connecttoserver()
  51. {
  52. if (!sclient.connected())//几个非连接的异常处理
  53. {
  54. //Serial.println("1" );
  55. if (!sclient.connect(host, tcpPort))
  56. {
  57. sclient.stop();
  58. delay(500);
  59. }
  60. }
  61. }

  

微信发送 “ON”

ESP8266收到消息后,通过串口打印出来给电脑显示

至此,完成一个粗略的测试级别的微信控制ESP8266点亮LED。

若控制宿舍台灯,直接对应接口加一个继电器,直接控制220v的通断。

若想控制传感器,给芯片装几个传感器,返回数据。

微信硬件平台(一) 公众号 ESP8266 Arduino LED的更多相关文章

  1. 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

    原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...

  2. .NET Core之微信支付之公众号、H5支付篇

    前言 本篇主要记录微信支付中公众号及H5支付全过程. 准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 配置篇 公众号或者服务号中 -------开发----- ...

  3. 微信系列之公众号Token验证

    微信系列之公众号Token验证 pycharm连接线上服务器开发 开发过程笔记 参考资料 python3安装web.py可以选择安装`pip install web.py==0.40.dev0 pyc ...

  4. 【微信SEO】公众号也能做排名?

    [写于2016年8月] 最近,微信团队发出一则公告,开放公众号运营者一年内更改公众号名一次,这对不少名字起的奇葩名字(包括dkplus)的公众号来说是一件好事. 为什么说是好事呢?公众号名字直接关联到 ...

  5. 【微信开发】公众号后台设置错误导致的微信redirect_uri参数错误【图】

    在微信开发中,如微信网页授权登录,分享到朋友圈自定义内容,微信h5支付时 可能会遇到微信redirect_uri参数错误的情况. 此时除了检查自己代码正确性外,还要检查一下是否正确地设置了公众号后台的 ...

  6. 微信支付(公众号支付APIJS、app支付)服务端统一下单接口java版

    一.微信公众号支付APIJS: 要完整的实现微信支付功能,需要前后端一起实现,还需要微信商户平台的配置.这里只是涉及服务端的代码. jar包:pom.xml <!-- ↓↓↓↓↓↓↓↓ 支付相关 ...

  7. .net 微信支付(公众号支付)遇到的问题

    啥也不说了搬砖的都知道老板说是什么就是什么 最近我老板让饿哦做一个微信支付的功能  还带微信上面京东众筹活动的那种,我买东西别人出钱的那种 然后用微信支付 我是新手之前也没有做过这个 所以估计着过程中 ...

  8. 【微信支付】公众号、商户基础配置和流程(包括设置支付授权目录、测试支付目录和白名单、JS接口安全域名、授权回调域名等)

    一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...

  9. 微信网页授权-公众号支付(获取openid、用户信息等)

    名词解释: openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要 ...

随机推荐

  1. js 小写金额转大写

    function smalltoBIG(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ...

  2. Linux查看机器的硬件信息

    转载:https://linux.cn/article-9932-1.html

  3. 自定义View的三个构造函数

    自定义View有三个构造方法,它们的作用是不同的. public MyView(Context context) { super(context); } public MyView(Context c ...

  4. Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础

    原创声明: 该文章为原创文章,未经博主同意严禁转载. 前言: Android常用的架构有:MVC.MVP.MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecy ...

  5. 想让安卓app不再卡顿?看这篇文章就够了

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由likunhuang发表于云+社区专栏 实现背景 应用的使用流畅度,是衡量用户体验的重要标准之一.Android 由于机型配置和系统的 ...

  6. Charles 抓包手机app

    最近在测为移动端提供的API, 使用mac系统, 发现fiddler在mac下无法使用, 不知道其他朋友是否遇见过, 只能找替代工具. 先去百度上搜索下载Charles 破解版, 选择Charles是 ...

  7. .NET Core 2.0

    下载 Visual Studio 2017 version 15.3 下载 .NET Core 2.0 下载 Visual Studio for Mac 微软今天发布了.NET Core 2.0 版本 ...

  8. 扫码下单使用FAQ

    1.适用情景:扫码点餐支付宝支付报错 解决方案:1.检查主账号上口碑授权是否失效.(重新授权) 2.检查主账号上的PID是否绑定.(绑定PID) 注意:1.支付宝扫码进行的扫码下单支持直连支付宝和蚂蚁 ...

  9. MySQL线程处于Waiting for table flush的分析

      最近遇到一个案例,很多查询被阻塞没有返回结果,使用show processlist查看,发现不少MySQL线程处于Waiting for table flush状态,查询语句一直被阻塞,只能通过K ...

  10. 最详细的C++对应C#的数据类型转换

    C++ ---------------------- C# LDWORD ----------------IntPtr LLONG-------------------Intptr bool ---- ...