微信硬件平台(一) 公眾號 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端口網頁服務功能,其實報備也很快,但是嫌麻煩沒使用。

第二種方案

  找個外國的服務器,沒有報備的限制。

本教程使用的外網服務器

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的通斷。

若想控制傳感器,給芯片裝幾個傳感器,返回數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM