微信硬件平台

本文目的,使用微信公众号控制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端口网页服务功能,其实报备也很快,但是嫌麻烦没使用。

第二种方案

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

本教程使用的外网服务器

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

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

  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

为该目录创建符号连接到 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的更多相关文章

  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. JavaScript机器学习之线性回归

    译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师. 原文: Machine Learning with JavaScript : Part 1 译者: Fundebug ...

  2. js循环json得到 键和值

    var jsondata=[{"男":4,"女":3,"不详":0},{"男one":23,"女two&quo ...

  3. vue+vuecli+webapck2项目配置文件详解

    1.文件结构 ├─build │ ├─build.js │ ├─check-versions.js │ ├─dev-client.js │ ├─dev-server.js │ ├─utils.js │ ...

  4. vue从入门到进阶:组件Component详解(六)

    一.什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功 ...

  5. web框架的本质

    一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...

  6. Nginx 部署多个 web 项目(虚拟主机)

    1,创建 www 目录 2,在 www 目录下创建 test1 和 test2 目录,表示两个项目 3,test1 下创建 test1.html 4,test2 下创建 test2.html 5,配置 ...

  7. Statement和PreparedStatement的异同

    1.首先两个都是java向数据库执行sql语句的对象! java代码连接数据库,并且执行sql语句的步骤如下: //1.注册数据库的驱动程序 Class.forName(driverClass); / ...

  8. css和HTML布局小技巧

    一:水平居中 1. 如下所示,让child在parent中水平居中 <!DOCTYPE html> <html> <head lang="en"> ...

  9. Android 7.0 新特性

    Android7.0提供新功能以提升性能.生产效率和安全性. 关于Android N的性能改进,Android N建立了先进的图形处理Vulkan系统,能少的减少对CPU的占用.与此同时,Androi ...

  10. Android string.xml 添加特殊字符

    解决项目中在string.xml 中显示特殊符号的问题,如@号冒号等.只能考虑使用ASCII码进行显示: @号 @ :号 : 空格   以下为常见的ASCII十进制交换编码: --> <- ...