微信接入arduino


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最終結果


免責聲明!

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



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