微信硬件平台
本文目的,使用微信公众号控制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
1 2 3 | 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上修改,后再复制过去)

1 2 3 4 5 6 7 8 9 | <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上,修改
添加
1 2 3 4 | 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,可以有智能提示,可以追踪函数实现等。当然你用其他工具也可以。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?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函数。这个函数里面有两个函数。
1 2 | $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代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?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文件提升写的权限吧:
给与权限(来到根目录下)
1 | cd ..<br>ls #查看确认/ var 路径出现<br>sudo chmod 666 / var /www/html/WeChat/1.txt |
再次发送消息,OK解决了!
如图。我们成功实现了微信来控制txt内容。那么下面只需要用ESP8266来不断请求这个txt的内容就好。
9 微信控制ESP8266,硬件程序烧录
我们采用arduino IDE方式来编写ESP82662的代码。具体的IDE设置请参照 大佬的教程。
版型选择参数
串口找不到更新下USB串口驱动
直接烧写到ESP8266里面就好了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #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的通断。
若想控制传感器,给芯片装几个传感器,返回数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2017-12-22 http://blog.csdn.net/pipisorry/article/details/51471222