https://blog.csdn.net/liudongdong19/article/details/81072857
一、准備工作。
1.微信公眾號,個人的就可以了,不用企業號什么的。
2.服務器(WINDOWS的。本帖不涉及Linux的),簡單的直接在阿里雲、騰訊雲、XX雲一個月30+元買的就好(或者是XX空間也行,要能支持PHP)。
(本文寫於2017.06這幾個月阿里雲活動比較好,送服務器免費用6個月,個人的淘寶賬號就可以登錄,但是要搶,也可以花18塊買個域名也會送免費的6個月服務器,這就不用搶了,等於18塊買了6個月的服務器)
3.ESP8266,推薦使用NodeMcu的,可以不用管供電,esp8266-01要注意供電足夠。
二、開始整。
1.1微信公眾號申請很容易的。
微信-1
微信-2
像圖上的那樣,一步步來,訂閱號是不用交錢的,就目前我們控制LED訂閱號是足夠了的。
1.2公眾號設置。
公眾號申請好之后登陸,然后進行開發者設置。
微信2-2
看上圖填寫完成之后就點擊提交,不出意外就顯示提交成功。成功后如圖
微信2-3
2.1服務器搭建。
再重申一遍吶~~本帖基於Windows的,不適用於Linux。本帖的實驗環境是Windows2016。其他版本的也可以。 上面提到阿里雲最近搞活動給送6個月的服務器。具體領取辦法自己看官網哈~~僅限新注冊用戶啊。這里就不講怎么領了。
你有了服務器之后(不管是領的免費的,還是買的付費的,或者淘寶買的服務器。)最后肯定會有個ip地址。然后用你自己電腦的遠程桌面連接,遠程連接到服務器。
輸入用戶名啊,密碼啥的,連接成功后進入到遠程桌面,然后打開瀏覽器,百度phpstudy .(本帖的服務器環境是基於phpstudy的)下載安裝。
這里要強調一下,安裝完成后默認的php版本比較低,推薦使用較新的,(不要問舊的行不行啊,自己試試去)。如圖所示。
圖2-4.phpstudy
推薦使用圖上畫框框的那連個組合,首次安裝成功后默認是php5.3還是幾。然后你點切換版本,選擇圖上框框里的兩個中的一個,我使用的是nginx那個。你點了之后會提示要下載個插件,按提示下載安裝就可以了,
記得下載X86的,不管你是64為操作系統還是32位操作系統
記得下載X86的,不管你是64為操作系統還是32位操作系統
記得下載X86的,不管你是64為操作系統還是32位操作系統
下載安裝完插件再回來點一下切換就可以了,這時候你在你自己電腦的瀏覽器里輸入你服務的ip地址,例如:11.11.11.11這時候應該會有一個php探針的頁面出來(具體不用知道是啥,反正輸入你的服務器ip之后有東西出來就可以了),這時候你的php環境就搭建完成了。
2.2PHP代碼部署 經過前面幾步你的公眾號已經申請到了,你的服務器PHP環境也搭建好了。那下來就開始部署PHP代碼了,對PHP不熟悉的同學不要着急,我這里給出個WeChat庫,教你怎么用。
WeChat.zip (10.14 KB, 下載次數: 68)
把這個庫下載下來,解壓到你服務器中nginx服務器的根目錄。如圖所示。
圖2-5 2-6 2-7
這里注意看這個路徑。要和微信公眾號開發者里面填的路徑匹配,即圖2-2上的URL要指向這個index.php文件
2.3核心代碼解析
這里推薦使用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();
這個是庫里面自帶的例子,功能就是你給你的公眾號發個內容,他在前面加上 收到了文字消息:
我們重點看看onText函數。這個函數里面有兩個函數。
$this->responseText(參數是字符串)這個就是給你回復。
$this->getRequest('content'))這個就是解析你發送來的文字消息返回值是字符串。
到這核心代碼就講完了,下一節我們來寫控制LED的代碼 2.4微信控制LED PHP代碼
上一節講到了用微信給服務器發東西,服務器給微信返回字符串。那我們可以這樣來做。
用微新給服務器發送字符串"ON"服務器檢測收到字符串"ON"之后就生成一個txt文件,並將“ON”寫入到txt文件。然后ESP8266不斷請求這個文件內容檢測到是ON就開燈。OFF就關燈。
思路就是這樣。那下來開始動手做。方式PHP代碼。
<?php require('wechat/Wechat.php'); class TestWechat extends Wechat { /** * 收到文本消息時觸發,回復收到的文本消息內容 * * @return void */ protected function onText() { //$this->responseText('收到了文字消息:' . $this->getRequest('content')); $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("$state"); } } $wechat = new TestWechat(array( 'token' => 'weixin', 'aeskey' => 'xxx', 'appid' => 'xxx', 'debug' => true )); $wechat->run();
圖2-8 php控制txt結果
如圖。我們成功實現了微信來控制txt內容。那么下面只需要用ESP8266來不斷請求這個txt的內容就好。
3.1 EPS8266控制部分
我們采用arduino IDE方式來編寫ESP82662的代碼。具體的IDE設置請參照 大佬的教程。
這塊只放上代碼。你直接燒寫到ESP8266里面就好了
#include <ESP8266WiFi.h> const char *ssid = "AAAA";//SSID const char *password = "AAAA1111";//WIFI密碼 const char *host = "47.94.3.48";//服務器地址 const int tcpPort = 80;//服務器端口號 WiFiClient sclient; int pinled = D4; void setup() { Serial.begin(115200); Serial.setTimeout(100); WiFi.begin(ssid, password); pinMode(pinled, OUTPUT); while (WiFi.status() != WL_CONNECTED)//查看WIFI鏈接狀態 { Serial.println("try connect"); delay(500); } } void loop() { connecttoserver(); sendtoserver(); if (sclient.available()) { String str = sclient.readStringUntil('\r'); Serial.println(str); if (str.indexOf("ON") >= 0) { digitalWrite(pinled, 1); } else if (str.indexOf("OFF") >= 0) { digitalWrite(pinled, 1); } } delay(500) ; } void sendtoserver() { String str = "GET /weixin/1.txt\r\n\r\n\r\n"; sclient.print(str); } void connecttoserver() { if (!sclient.connected())//幾個非連接的異常處理 { //Serial.println("1" ); if (!sclient.connect(host, tcpPort)) { sclient.stop(); delay(500); } } }
圖3-1最終結果