微信硬件平台(一) 公众号 ESP8266 Arduino LED
微信硬件平台
本文目的,使用微信公众号控制ESP8266的LED开和关。进一步使用微信当遥控器(避免写APP或者IOS或者小程序),控制一切设备。给两个关键的总教程参考。
作为个人DIY开始使用者可入门,作为商用需要开发更多的东西才能使用。
官方产品视频 https://v.qq.com/x/page/j0170txx5eb.html
目前整体测试效果
打开微信,关注自己的公众号
功能结构图
1 公众号注册
- 1.申请认证公众号&开通设备功能
- 1.1公众号申请: https://mp.weixin.qq.com
个人订阅号
功能有限,不能有设备管理模块功能,本教程系列使用的是订阅号,做一个测试足够了。
企业服务号
注册必须要有公司信息,法人等组织代码,个人用不了。 某宝上可以买个临时用下测试。
可以拥有设备管理功能,简单来说可以生产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端口网页服务功能,其实报备也很快,但是嫌麻烦没使用。
第二种方案
找个外国的服务器,没有报备的限制。
本教程使用的外网服务器
自己买一个。
这里教程是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
- yum install php
- yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
- yum install php-mysql
- 以上命令为安装php及其支持的组件
- 测试是否安装成功
在这个文件夹下,创建一个info.php文件
- vi /var/www/html/info.php
(不喜欢vi命令编辑的,可以把文件拖到windos上修改,后再复制过去)
- <html>
- <body>
- <h1>It's work!</h1>
- <?php
- echo 'HELLO WORLD';
- phpinfo();
- ?>
- </body>
- </html>
- 重启Apache服务器
- 在浏览器地址栏访问:http://自己的服务器IP/info.php
安装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上,修改
添加
- LoadModule php5_module modules/libphp5.so
- AddType application/x-httpd-php .php
- AddType application/x-httpd-php-source .phps
然后文件重新复制回去,修改后重启Apache服务
装MySql图形管理界面phpMyAdmin
从官网上下载下来(注意版本号,看是否支持本机的MySql和PHP),直接放在网站根目录下,在浏览器中输入相应的地址就可以访问,登陆后即可管理
https://blog.csdn.net/programmer_wei/article/details/45888835
- #安装phpmyadmin
- yum -y install phpmyadmin
- yum install php-mcrypt
phpmyadmin默认只能使用http://localhost/phpmyadmin来访问,可以修改/etc/httpd/conf.d/phpmyadmin.conf中对应部分为
- <Directory "/usr/share/phpmyadmin">
- Order Deny,Allow
- # Deny from all
- Allow from All
- </Directory>
phpMyAdmin 的默认安装目录是 /usr/share/phpMyAdmin
,同时会在 Apache 的配置文件目录中自动创建虚拟主机配置文件 /etc/httpd/conf.d/phpMyAdmin.conf
(区分大小写)。
vi /etc/httpd/conf.d/phpmyadmin.conf
- #Alias /phpMyAdmin /usr/share/phpMyAdmin
- #Alias /phpmyadmin /usr/share/phpMyAdmin
里面的
- Require ip 127.0.0.1
- Require ip ::1
改成
- Require all granted
为该目录创建符号连接到 phpMyAdmin 安装目录(/usr/share/phpMyAdmin
):
- ln -sf /usr/share/phpMyAdmin /var/www/html/phpmyadmin
- [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 个人申请订阅号做的测试
- 公众号申请: https://mp.weixin.qq.com
订阅号是不用交钱的,就目前我们控制LED订阅号是足够了的
- 订阅号公众号设置
公众号申请好之后登陆,然后进行开发者设置。
说明:
服务器路径一定要填写对,是微信SDK文件下的的index.php
/var/www/html/WeChat
对应填写 : 服务器IP+/WeChat/index.php
不是/var/www/html/下面的index.php(安装网页服务器的测试网页)
根据实际的sdk路径填写地址。
看上图填写完成之后就点击提交,不出意外就显示提交成功。成功后如上图
6 测试
打开微信,关注自己的公众号
现有功能是
7 微信SDK服务分析
核心代码解析
核心代码解
这里推荐使用PHPStorm,可以有智能提示,可以追踪函数实现等。当然你用其他工具也可以。
- <?php
- require('wechat/Wechat.php');
- class TestWechat extends Wechat {
- /**
- * 收到文本消息时触发,回复收到的文本消息内容
- *
- * @return void
- */
- protected function onText()
- {
- $this->responseText('收到了文字消息:' . $this->getRequest('content'));
- }
- }
- $wechat = new TestWechat(array(
- 'token' => 'weixin',
- 'aeskey' => 'xxx',
- 'appid' => 'xxx',
- 'debug' => true
- ));
- $wechat->run();[/kenrobot_code]
这个是库里面自带的例子,功能就是你给你的公众号发个内容,他在前面加上 收到了文字消息:
我们重点看看onText函数。这个函数里面有两个函数。
- $this->responseText(参数是字符串)这个就是给你回复。
- $this->getRequest('content'))这个就是解析你发送来的文字消息返回值是字符串。
8 微信控制LED 对接硬件ESP8266
原教程给的是通过把微信发来的消息保存成txt文件,然后ESP8266不断请求这个txt文件,获取内容判断然后做出开关灯命令。
-------------------------------------------------------------------------------------
作为一个测试足够了,但是后期多用户访问时候,如下问题:
1 涉及身份识别和产品用户绑定问题.
大白要查询和控制自己的安防开关,首先服务器要知道是大白发来的请求,其次还要根据产品唯一ID找到大白绑定的设备。不能把小明的触感器数据发过去。
企业申请的服务号具备这个功能。,例如
https://iot.weixin.qq.com/wiki/new/index.html?page=5-5
智能空调的产品需求及接入微信硬件云实施方案:
- ●用户用微信配置设备联网&绑定
- 方案一(推荐):设备上张贴“每种型号唯一的二维码”,用户扫码后通过Airkiss配网并绑定设备(http://iot.weixin.qq.com/wiki/new/index.html?page=4-6)
- 方案二:设备上张贴“每个产品唯一的二维码”+用户扫码后绑定设备+进入公众号再通过Airkiss配网
- ●空调遥控器
- 方案一:厂家利用微信提供的标准控制模板,链入公众号菜单
- 方案二:厂家自己开发的H5控制页面,链入公众号菜单
- ●空调售后服务
- 方案:厂家开发H5页面,链入公众号菜单
-------------------------------------------------------------------------------------
用微新给服务器发送字符串"ON"服务器检测收到字符串"ON"之后就生成一个txt文件,并将“ON”写入到txt文件。然后ESP8266不断请求这个文件内容检测到是ON就开灯。OFF就关灯。
思路就是这样。那下来开始动手做。方式PHP代码。
- <?php
- require('wechat/Wechat.php');
- class TestWechat extends Wechat {
- /**
- * 收到文本消息时触发,回复收到的文本消息内容
- *
- * @return void
- */
- protected function onText()
- {
- $state=$this->getRequest('content');
- if($state=="ON" ||$state=="OFF")
- {
- $file=fopen("1.txt","w")or die("failed!");
- //这一行就是将ON或者OFF以覆盖方式写入1.txt
- fwrite($file,$state);
- fclose($file);
- }
- $this->responseText('主人好,我收到你的消息:' . $this->getRequest('content'));
- }
- }
- $wechat = new TestWechat(array(
- 'token' => 'weixin',
- 'aeskey' => 'xxx',
- 'appid' => 'xxx',
- 'debug' => true
- ));
- $wechat->run();
- 运行到打开1.txt文件的时候,显示没有文件读取和写的权限。
- 发现用记事本创建的1.txt只有读权限,没有写入的权限,好吧问题出在这呢,给1.txt文件提升写的权限吧:
给与权限(来到根目录下)
- cd ..
ls #查看确认/var路径出现
sudo chmod 666 /var/www/html/WeChat/1.txt
再次发送消息,OK解决了!
如图。我们成功实现了微信来控制txt内容。那么下面只需要用ESP8266来不断请求这个txt的内容就好。
9 微信控制ESP8266,硬件程序烧录
我们采用arduino IDE方式来编写ESP82662的代码。具体的IDE设置请参照 大佬的教程。
版型选择参数
串口找不到更新下USB串口驱动
直接烧写到ESP8266里面就好了
- #include <ESP8266WiFi.h>
- const char *ssid = "dongdong";//WIFI账号
- const char *password = "********";//WIFI密码
- const char *host = "192.168.1.1";//服务器地址 公网IP或域名
- const int tcpPort = 80;//服务器端口号
- WiFiClient sclient;
- int pinled = D4; // LED灯在D4引脚口 板载测试LED
- void setup()
- {
- Serial.begin(115200); //串口波特率
- Serial.setTimeout(100);
- WiFi.begin(ssid, password); // 链接WIFI
- pinMode(pinled, OUTPUT); //LED引脚初始化,输出模式
- while (WiFi.status() != WL_CONNECTED)//查看WIFI链接状态
- {
- Serial.println("try connect");
- delay(500);
- }
- }
- void loop()
- {
- connecttoserver(); // 链接服务器
- sendtoserver(); // 请求网页服务器文件夹路径下 /WeCchat/1.txt文件,
- if (sclient.available())
- {
- String str = sclient.readStringUntil('\r'); // 读一行
- Serial.println(str); //串口打印出来
- if (str.indexOf("ON") >= 0)
- {
- digitalWrite(pinled, 0);// 开D4口,板载电路设计,给低电平LED亮,其他口和其他自己外接的LED反过来 1是开
- }
- else if (str.indexOf("OFF") >= 0)
- {
- digitalWrite(pinled, 1);
- }
- }
- delay(500) ;
- }
- void sendtoserver()
- {
- String str = "GET /WeChat/1.txt\r\n\r\n\r\n"; // GET 请求网页服务器默认文件夹下的文件。 根据实际路径设置
- sclient.print(str);
- }
- void connecttoserver()
- {
- if (!sclient.connected())//几个非连接的异常处理
- {
- //Serial.println("1" );
- if (!sclient.connect(host, tcpPort))
- {
- sclient.stop();
- delay(500);
- }
- }
- }
微信发送 “ON”
ESP8266收到消息后,通过串口打印出来给电脑显示
至此,完成一个粗略的测试级别的微信控制ESP8266点亮LED。
若控制宿舍台灯,直接对应接口加一个继电器,直接控制220v的通断。
若想控制传感器,给芯片装几个传感器,返回数据。
微信硬件平台(一) 公众号 ESP8266 Arduino LED的更多相关文章
- 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo
原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...
- .NET Core之微信支付之公众号、H5支付篇
前言 本篇主要记录微信支付中公众号及H5支付全过程. 准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 配置篇 公众号或者服务号中 -------开发----- ...
- 微信系列之公众号Token验证
微信系列之公众号Token验证 pycharm连接线上服务器开发 开发过程笔记 参考资料 python3安装web.py可以选择安装`pip install web.py==0.40.dev0 pyc ...
- 【微信SEO】公众号也能做排名?
[写于2016年8月] 最近,微信团队发出一则公告,开放公众号运营者一年内更改公众号名一次,这对不少名字起的奇葩名字(包括dkplus)的公众号来说是一件好事. 为什么说是好事呢?公众号名字直接关联到 ...
- 【微信开发】公众号后台设置错误导致的微信redirect_uri参数错误【图】
在微信开发中,如微信网页授权登录,分享到朋友圈自定义内容,微信h5支付时 可能会遇到微信redirect_uri参数错误的情况. 此时除了检查自己代码正确性外,还要检查一下是否正确地设置了公众号后台的 ...
- 微信支付(公众号支付APIJS、app支付)服务端统一下单接口java版
一.微信公众号支付APIJS: 要完整的实现微信支付功能,需要前后端一起实现,还需要微信商户平台的配置.这里只是涉及服务端的代码. jar包:pom.xml <!-- ↓↓↓↓↓↓↓↓ 支付相关 ...
- .net 微信支付(公众号支付)遇到的问题
啥也不说了搬砖的都知道老板说是什么就是什么 最近我老板让饿哦做一个微信支付的功能 还带微信上面京东众筹活动的那种,我买东西别人出钱的那种 然后用微信支付 我是新手之前也没有做过这个 所以估计着过程中 ...
- 【微信支付】公众号、商户基础配置和流程(包括设置支付授权目录、测试支付目录和白名单、JS接口安全域名、授权回调域名等)
一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...
- 微信网页授权-公众号支付(获取openid、用户信息等)
名词解释: openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要 ...
随机推荐
- js 小写金额转大写
function smalltoBIG(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ...
- Linux查看机器的硬件信息
转载:https://linux.cn/article-9932-1.html
- 自定义View的三个构造函数
自定义View有三个构造方法,它们的作用是不同的. public MyView(Context context) { super(context); } public MyView(Context c ...
- Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础
原创声明: 该文章为原创文章,未经博主同意严禁转载. 前言: Android常用的架构有:MVC.MVP.MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecy ...
- 想让安卓app不再卡顿?看这篇文章就够了
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由likunhuang发表于云+社区专栏 实现背景 应用的使用流畅度,是衡量用户体验的重要标准之一.Android 由于机型配置和系统的 ...
- Charles 抓包手机app
最近在测为移动端提供的API, 使用mac系统, 发现fiddler在mac下无法使用, 不知道其他朋友是否遇见过, 只能找替代工具. 先去百度上搜索下载Charles 破解版, 选择Charles是 ...
- .NET Core 2.0
下载 Visual Studio 2017 version 15.3 下载 .NET Core 2.0 下载 Visual Studio for Mac 微软今天发布了.NET Core 2.0 版本 ...
- 扫码下单使用FAQ
1.适用情景:扫码点餐支付宝支付报错 解决方案:1.检查主账号上口碑授权是否失效.(重新授权) 2.检查主账号上的PID是否绑定.(绑定PID) 注意:1.支付宝扫码进行的扫码下单支持直连支付宝和蚂蚁 ...
- MySQL线程处于Waiting for table flush的分析
最近遇到一个案例,很多查询被阻塞没有返回结果,使用show processlist查看,发现不少MySQL线程处于Waiting for table flush状态,查询语句一直被阻塞,只能通过K ...
- 最详细的C++对应C#的数据类型转换
C++ ---------------------- C# LDWORD ----------------IntPtr LLONG-------------------Intptr bool ---- ...