ESP 8266学習の道十一(Mqtt通信)

20955 ワード

lua開発8266 APIマニュアル:https://nodemcu.readthedocs.io/en/master/​​​​​​​
MQTTパケット形成リファレンスについて :http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718027
Windows下MQTTサーバ構築のApollo
(1)Apolloのダウンロード
目次
Windows下MQTTサーバ構築のApollo
(1)Apolloのダウンロード
(2)取付
(3)JDK取付
(4)サーバインスタンスの作成
三、MQTTクライアントテスト
ローカルWindowsにMQTTサーバをインストールして通信をテストする
次はesp 8266モジュールがmqttサーバに接続するテストプログラムです.
モジュールと別のクライアントの通信状態
ダウンロード:Download it today!
ESP8266学习之路 十一 (Mqtt通信)_第1张图片 ESP8266学习之路 十一 (Mqtt通信)_第2张图片
(2)取付
解凍して以下のファイルが得られます.
ここで注意しなければなりません.解凍します. apache-apollo-1.7.1所在フォルダ名は存在しません 中国語かスペースで、後で何か間違いがあったと言います.
ESP8266学习之路 十一 (Mqtt通信)_第3张图片
に入る apache-apollo-1.7.1-windows-distroapache-apollo-1.7.1binフォルダ
shiftキーを押してapollo.cmdを選択し、右クリックします.コマンドウィンドウを開くには、ここを選択します.
 
ESP8266学习之路 十一 (Mqtt通信)_第4张图片
次にcmdウィンドウでapollo.cmdを実行します.エラーが発生していることがわかります.上のUbuntuの下にインストールする時すでに言及して、更にJDKをインストールする必要があります.
ESP8266学习之路 十一 (Mqtt通信)_第5张图片
(3)JDK取付
WIN 7 64ビットシステムはJDKをインストールし、環境変数を構成する:https://jingyan.baidu.com/article/3c343ff70bc6ea0d377963df.html
ダウンロード:Java SE Development Kit 8 Downloads
ESP8266学习之路 十一 (Mqtt通信)_第6张图片
Windowsシステムは何桁なのか、これはよくわかるでしょう.マイコンピュータ->プロパティを表示し、コンピュータに関する基本情報を表示します.
ESP8266学习之路 十一 (Mqtt通信)_第7张图片
私のコンピュータはwin 10 64ビットで、jdk-8 u 144-windows-x 64.exeをダウンロードしてインストールします
次に、JDK環境変数を設定します.
マイコンピュータ->プロパティ->高度なシステム設定->高度な環境変数
ESP8266学习之路 十一 (Mqtt通信)_第8张图片
 
このセクションでは、FFmpegのWindowsのインストールについて説明しています.ユーザー変数とシステム変数が表示されます.
「ユーザー変数」を現在のユーザー用に変更します.他のWindowsユーザーは使用できません.各ユーザーが使用できるようにするには、システム変数を変更する必要があります.
ESP8266学习之路 十一 (Mqtt通信)_第9张图片
変数に既存のコンテンツを削除するのに十分ではないことに注意してください.変数が既に存在する場合は、後にセミコロン';'で区切り、追加します.
ESP8266学习之路 十一 (Mqtt通信)_第10张图片
 
現在のユーザーのみを使用可能にし、ユーザー変数を変更すればいいです.
ユーザ環境変数に新しい変数JAVA_を作成するHOME,設定変数値F:Program FilesJavajdk 1.8.0_144
ESP8266学习之路 十一 (Mqtt通信)_第11张图片
新しいPATH、変数値%JAVAを設定HOME%\bin;%JAVA_HOME%\jre\bin
ESP8266学习之路 十一 (Mqtt通信)_第12张图片
新しいCLASSSPATHを作成し、変数値を設定します.JAVA_HOME%\lib\dt.jar;%JAVA_HOME%libtools.jar前の.は現在のディレクトリを示しています.「OK」ボタンをクリックします.
ESP8266学习之路 十一 (Mqtt通信)_第13张图片
これで、構成が完了します.cmdを開いて構成が成功したかどうかをテストします.
Java-versionを入力し、バージョンjava version“1.8.0_144”を表示し、javac-versionを入力し、javac 1.8.0_を表示します.144、JDKのインストールと環境変数の構成が成功したことを説明します.
ESP8266学习之路 十一 (Mqtt通信)_第14张图片
 
そして上に続きます.に入る apache-apollo-1.7.1-windows-distroapache-apollo-1.7.1binフォルダ
shiftキーを押してapollo.cmdを選択し、右クリックします.コマンドウィンドウを開くには、ここを選択します.
再びcmdウィンドウでapollo.cmdを実行すると、次のような情報が表示されます.
ESP8266学习之路 十一 (Mqtt通信)_第15张图片
(4)サーバインスタンスの作成
参照:Getting Started Guide
CMDコマンドウィンドウでの入力 apollo create mybroker、もちろんmybrokerという名前は勝手につけることができます.
ESP8266学习之路 十一 (Mqtt通信)_第16张图片
 
mybrokerを見ると、etcapollo.xmlファイルの下にサーバ情報を構成するファイルがたくさんあります.etcusers.propertiesファイルにはMQTTサーバに接続する際に使用するユーザー名とパスワードが含まれています.元のadmin=passwordを変更して、改行して新しいユーザー名パスワードを追加することができます.
ESP8266学习之路 十一 (Mqtt通信)_第17张图片
bin:インスタンスに関連付けられた実行スクリプトを保存します.etc:インスタンスプロファイルdataの保存:永続メッセージを格納するためのデータファイルログの保存:回転ログファイルtmpの保存:エージェント実行間で安全に削除された一時ファイルの保存
 
cmdを開き、apache-apollo-1.7.1binmybrokerbinapollo-broker.cmd runを実行してサーバを開きます.次の図に示します.
ESP8266学习之路 十一 (Mqtt通信)_第18张图片
 
ここは注意が必要です. apache-apollo-1.7.1所在フォルダ名は存在しません 中国語またはスペース.私の上にあるのは360安全閲覧ダウンロードというディレクトリの下に保存されているからです.指定したパスが見つからない場合があります.
ESP8266学习之路 十一 (Mqtt通信)_第19张图片
 
次にブラウザを開き、 http://127.0.0.1:61680/またはhttps://127.0.0.1:61681/
Apollo Consoleウィンドウにアクセスできます.
ESP8266学习之路 十一 (Mqtt通信)_第20张图片
デフォルトのログインIDとパスワードは admin および password 
ESP8266学习之路 十一 (Mqtt通信)_第21张图片
三、MQTTクライアントテスト
Apolloサーバのインストールが完了しました.次に、パブリケーションサブスクリプションを簡単にテストします.
この中にはネット上に MQTTプロトコルのApache Apolloインストール使用 この文章はjavaを使って、Androidでテストしました.
これは私には向いていませんAndroidがわかりません 青やせしいたけですね.
 
もう一つはグーグルブラウザの拡張プログラムです mqttlens
まずプラグインを追加します
ESP8266学习之路 十一 (Mqtt通信)_第22张图片
 
クリックして拡張プログラムを追加
ESP8266学习之路 十一 (Mqtt通信)_第23张图片
 
検索 mqttlens、最後にCHROMEに追加
ESP8266学习之路 十一 (Mqtt通信)_第24张图片
 
インストール完了!
テストを行います
先に実行 Apolloサーバ
ESP8266学习之路 十一 (Mqtt通信)_第25张图片
ESP8266学习之路 十一 (Mqtt通信)_第26张图片
 
そして起動 mqttlens 
ESP8266学习之路 十一 (Mqtt通信)_第27张图片
 
次にConnections+をクリックします
ESP8266学习之路 十一 (Mqtt通信)_第28张图片
 
下図が表示され、関連情報を記入します.
ESP8266学习之路 十一 (Mqtt通信)_第29张图片
そして、パブリケーションインタフェースにアクセスします.
ESP8266学习之路 十一 (Mqtt通信)_第30张图片
WindowsにMQTTサーバをインストール、これで終了です.
MQTTサーバリファレンスをローカルコンピュータ側にインストールします.    https://blog.csdn.net/qq_29350001/article/details/76680646
 
 
ローカルWindowsにMQTTサーバをインストールして通信をテストする
ESP8266学习之路 十一 (Mqtt通信)_第31张图片
ESP8266学习之路 十一 (Mqtt通信)_第32张图片
私は私のコンピュータを使ってmqttサーバーをテストして、mqttサーバーipは本機のipで、ポートはmqttサーバーを作成する時、tcp接続のあのポートを創立します
ユーザー名とパスワードmqttサーバのインストール時に確立された、ファイル  「apache-apollo-1.7.1binmybrokeretc」の下  「users.properties」および「groups.properties」ファイルでの変更
ESP8266学习之路 十一 (Mqtt通信)_第33张图片
ESP8266学习之路 十一 (Mqtt通信)_第34张图片
ESP8266学习之路 十一 (Mqtt通信)_第35张图片
ESP8266学习之路 十一 (Mqtt通信)_第36张图片
ESP8266学习之路 十一 (Mqtt通信)_第37张图片
ローカルmqttサーバのテスト結果:
ESP8266学习之路 十一 (Mqtt通信)_第38张图片
 
次はesp 8266モジュールがローカルmqttサーバに接続するテストプログラムです.
ESP 8266モジュールを設定してルータに接続した後にmqttクライアントを作成してmqttサーバーに接続する
リモートサーバに接続するときは、リモートサーバipとローカル接続が同じであることを知る必要があります.
SMartで接続ルータをバインドすると、モジュールはルータの接続情報を知らず、ブロードキャストでそのネットワークに接続していることをモジュールに知らせる
mqttclient.luaファイル:mqttclient.luaファイルにコメントを追加しないでください.メモにコメントを追加するのは、よりよく理解するためだけです.プログラムをモジュールにアップロードする必要がある場合は、コメントをすべて削除することに注意してください.
MqttServerIP="192.168.0.102"      --Mqtt   ip        ip
MqttServerPort=61613              --Mqtt      
MqttUserName="admin"              --Mqtt      
MqttUserPassword="password"       --Mqtt        
MqttLinkStat = 0             	  --Mqtt       

UartReceData = ""                 --        
UartReceCnt = 0                   --        
UartReceTempCnt = 0               --          


wifi.setmode(wifi.STATION)       --     station  
local stacfg={
    ssid="TP-Link",      
    pwd="12345678"  
}
wifi.sta.config(stacfg)          --    station    
wifi.sta.autoconnect(1)          --      wifi

Clientid = wifi.sta.getmac()     --    mac   mqtt   ID

ClientSubscribeTopic = "AAA"    --    
ClientPublishTopic = "111"      --    

MqttClient=mqtt.Client(Clientid,3,MqttUserName,MqttUserPassword)  --  mqtt   
MqttClient:lwt(ClientPublishTopic,"offline",1,1)   --    

local function ConnectSuccess(client)  --  mqtt           
    print("MqttServer connect sucess")
    client:subscribe(ClientSubscribeTopic,0,function(client)print("subscribe sucess")end) 
    MqttLinkStat = 1
    tmr.stop(3)
end

local function ConnectFailed(client, reason) --  mqtt           
    print("MqttServer connect fail")
    MqttLinkStat = 0 
    tmr.start(3)
    
end


tmr.alarm(3, 2000, 1, function() --    3  mqtt            /      
         MqttClient:connect(MqttServerIP, MqttServerPort, 0,ConnectSuccess,ConnectFailed)
end)


tmr.alarm(2,10,1,function() 
     if UartReceCnt ~= 0 then 
        if UartReceTempCnt == UartReceCnt then 
            UartReceTempCnt = 0
            UartReceCnt = 0  
            --send to-Mqtt
            if MqttClient ~= nil then 
                MqttClient:publish(ClientPublishTopic,UartReceData,1,1,function(client)  end)
            end
        else
            UartReceTempCnt = UartReceCnt 
        end
     end
end)

-- mqtt       
MqttClient:on("offline", function(client, topic, data) tmr.start(3) end)
--  mqtt     
MqttClient:on("message", function(client, topic, data)
        if data == "switch;relay=1" then 
            gpio.write(2,1)  
            if gpio.read(2)==1 then 
                if MqttClient ~= nil then 
                    MqttClient:publish(ClientPublishTopic,"ON-RELAY",1,1,function(client)  end)
                end
            end  
        end 
            
        if data == "switch;relay=0" then 
            gpio.write(2,0) 
            if gpio.read(2)==0 then 
                if MqttClient ~= nil then 
                    MqttClient:publish(ClientPublishTopic,"OFF-RELAY",1,1,function(client)  end)
                end
            end
        end
        
end)


--      
uart.on("data",0,function(data) 
            UartReceData = UartReceData..data 
            UartReceCnt = UartReceCnt + 1 	 
end,0)    


--    wifi    ip
printip = 0
wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
    printip = 0
end)

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
   if printip == 0 then
      print("+IP->"..T.IP)
   end
   printip = 1
end)

 
モジュールと別のクライアントの通信状態
ESP8266学习之路 十一 (Mqtt通信)_第39张图片
ESP8266学习之路 十一 (Mqtt通信)_第40张图片
ESP8266学习之路 十一 (Mqtt通信)_第41张图片
ESP8266学习之路 十一 (Mqtt通信)_第42张图片