微信硬件平台(一) 公众号 ESP8266 Arduino LED

时间:2023-03-10 06:16:31
微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台

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

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

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

目前整体测试效果

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED      微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台(一)  公众号 ESP8266 Arduino LED

功能结构图

微信硬件平台(一)  公众号 ESP8266 Arduino LED

1 公众号注册

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED


个人订阅号   

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

企业服务号

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

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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系统镜像

微信硬件平台(一)  公众号 ESP8266 Arduino LED

2-2 开放服务器端口

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

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

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

参考教程 自己搜

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

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

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

至此,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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

配置文件路径

/etc/httpd/conf/httpd.conf

微信硬件平台(一)  公众号 ESP8266 Arduino LED

安装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上修改,后再复制过去)
微信硬件平台(一)  公众号 ESP8266 Arduino LED
<html>
<body>
<h1>It's work!</h1>
<?php
echo 'HELLO WORLD';
phpinfo();
?>
</body>
</html>

  

重启Apache服务器

在浏览器地址栏访问:http://自己的服务器IP/info.php
微信硬件平台(一)  公众号 ESP8266 Arduino LED
 

安装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.****.net/qq_25371579/article/details/78476186

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

添加

LoadModule php5_module modules/libphp5.so

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

装MySql图形管理界面phpMyAdmin

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

https://blog.****.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 (区分大小写)。

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

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

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

http://localhost/phpmyadmin

微信硬件平台(一)  公众号 ESP8266 Arduino LED

至此网页服务器搭建完毕

4 配置微信SDK

1下载SDK 

链接:https://pan.baidu.com/s/1YKzOOqNxUyGiso4SlyAc5g
提取码:tn4x
微信硬件平台(一)  公众号 ESP8266 Arduino LED

2 将SDK放在服务器下

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

/var/www/html/WeChat

微信硬件平台(一)  公众号 ESP8266 Arduino LED

5 配置微信公众号

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

公众号申请: https://mp.weixin.qq.com
微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

 微信硬件平台(一)  公众号 ESP8266 Arduino LED
说明:

服务器路径一定要填写对,是微信SDK文件下的的index.php
/var/www/html/WeChat
对应填写 : 服务器IP+/WeChat/index.php
微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

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

6 测试

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

现有功能是

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

●用户用微信配置设备联网&绑定
方案一(推荐):设备上张贴“每种型号唯一的二维码”,用户扫码后通过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();

  

  

微信硬件平台(一)  公众号 ESP8266 Arduino LED

运行到打开1.txt文件的时候,显示没有文件读取和写的权限。

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

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

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

版型选择参数

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台(一)  公众号 ESP8266 Arduino LED

直接烧写到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);
}
}
}

  

微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信发送 “ON”

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

微信硬件平台(一)  公众号 ESP8266 Arduino LED

微信硬件平台(一)  公众号 ESP8266 Arduino LED

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

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

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