ラズベリーパイとBaiduの空物事の仕事の間の通信を行う方法------ラズベリーPiは、独自のスマートホーム(3)を構築使い方

1、まず第一に、我々は最初のラズベリーパイにクライアントmosquittoをインストールする必要があります

mosquittoが導入:
、契約MQTT v3.1のオープンソースのメッセージブローカソフトウェアを達成するために、メッセージのプッシュを軽量提供し、支持体は、パブリッシュ/サブスクライブメッセージをモードを押して、デバイス間のショートメッセージ通信のための装置はなりこうした現在広く使用される低消費電力センサー、携帯電話、組込みコンピュータ、マイクロコントローラやその他のモバイルデバイスなど、シンプルで。典型的なアプリケーションの場合は、アンディ・スタンフォード・ClarkMosquitto(ファウンダーMQTTプロトコルの1つ)の遠隔監視およびホームオートメーションを実現することです。かつ詳細にMQTTプロトコルの講義OggCampに。

ターミナルラズベリーパイを開き、入力します。

sudo apt-get install mosquitto mosquitto-clients

確認するために、Yキーを押し

インストールが成功mosquittoしたかどうかを確認するには、次のコードを使用して、それぞれ二つの端子を使用してください

mosquitto_sub -t m -d
mosquitto_pub -t m -m "This is a message from pi."

言葉になり、端末に登録の「これはパイからの私の最初のメッセージです」

mosquittoの使用に関する詳細:https://blog.csdn.net/xyblog/article/details/50113883

2、インストールpaho.mqttライブラリ

ラズベリーのpythonの複数のバージョンで来る場合は、インストールの種類を指定する必要がある場合:

python3

sudo python3 -m pip install paho-mqtt

python2

sudo python2 -m pip install paho-mqtt

2.1はじめpaho.mqtt上のライブラリを使用します

ジェーンは、著者、本の中で仕上げ思った:EMQ詳細は来る:https://www.jianshu.com/p/b76dbc675141

  • 接続ブローカーは、connect()/ connect_async()を使用する
    ブローカーのネットワークに接続されたまま)(コール・ループを
    ループ()プロセスにloop_start()呼び出しを使用して
    loop_forever()維持ループ()を呼び出す使用して
    サブスクライブ()のトピックにサブスクライブし、受信したメッセージを使用して
    (公開使用を)を発表しました
    ブローカーから切断()を使用して切断

  • on_connect(クライアント、ユーザデータ、旗、 RC)
    旗[「セッション存在」]:ブローカが反応して、我々は要求を呼び出し、「フラグが」応答ディクショナリのパラメータであってブローカーである - このフラグ提供されている場合クリーンセッションは、0に設定されているだけのためにセット1は、セッションがあった場合の情報の前にセッションの前にブローカーに再接続するクライアントのセッション= 0は、まだ、保存されます。「RC」の値は、接続が成功したかどうかを決定するために使用しました

  • on_disconnect(クライアント、ユーザデータ、RC)
    クライアントがブローカー切断されたときに呼び出されます

  • ON_MESSAGE(クライアント、ユーザデータ、メッセージ)
    メッセージは、クライアント上で受信されたときに呼び出されるがスレッドを購読、「メッセージ」変数は、すべてのメッセージの特徴を記述するMQTTメッセージがあります

  • on_publish(クライアント、ユーザデータ、半ば)が
    パブリッシュ()メッセージを使用している場合、エージェントがコールを完了した転送に送信されます。適切なハンドシェイクが完了したことを意味するQoSレベルのメッセージ1と2について。QoSの0の場合、それだけでメッセージがクライアントを残したことを意味します。「ミッド」は、変数()呼び出し戻り、対応する中間変数から公開されています。このコールバックでも公開()呼び出しが正常に返すので、それは常にメッセージが送信されたという意味ではありません、非常に重要です

  • on_subscribe(クライアント、ユーザデータ、ミッド、 granted_qos)
    Brokerが呼び出しにサブスクリプション要求に応じて、それぞれから「半ば」変数である()呼び出しが戻るが、中間変数をサブスクライブするとき、「granted_qos」変数リストが異なるQoSレベルを送信するためのサブスクリプション要求するたびにあります

  • on_unsubscribe(クライアント、ユーザデータ、ミッド)
    Brokerが配信停止要求の呼び出しに応じて、「半ば」変数は、対応する(からの退会で呼び出される)中間変数を返します。

  • (クライアント、ユーザデータ、レベル、on_log bufは)
    クライアントがログ情報を呼び出すことがある場合、定義はデバッグできるように、「レベル」変数は、メッセージレベルですMQTT_LOG_INFO、MQTT_LOG_NOTICE、MQTT_LOG_WARNING、MQTT_LOG_ERR、含ま MQTT_LOG_DEBUG、 メッセージ自体はbufがあります。

適用例1(メッセージ):

パブ:

import paho.mqtt.client as mqtt
 
def on_connect(client, userdata, flags, rc):
  print("Connected with result code "+str(rc))

def on_message(client, userdata, msg):
  print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("127.0.0.1", 1883, 600)
client.publish('emqtt',payload='Hello,EMQ!',qos=0)
client.loop_start()

サブ:

import paho.mqtt.client as mqtt
 
def on_connect(client, userdata, flags, rc):
  print("Connected with result code "+str(rc))

def on_message(client, userdata, msg):
  print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("127.0.0.1", 1883, 600)
client.subscribe('emqtt',qos=0)
client.loop_start()

使用例2(リモコンMQTT GPIOを使用して)。

実験室の詳細で仕上げのラズベリーパイのアイデアが来る:http://shumeipai.nxez.com/2018/09/16/install-mosquitto-on-the-raspberry-pi-to-implement-mqtt.html

開閉状態の代わりに、ラズベリーパイGPIO番号のインデックスを表す、値JSONパケットとしてメッセージの内容は、パケットフォーマットは、{0:17、「値」「インデックス」}です。

# -*- coding: utf-8 -*-  
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import json
  
# BCM GPIO编号
pins = [17,18,27,22,23,24,25,4]
def gpio_setup():
    # 采用BCM编号
    GPIO.setmode(GPIO.BCM)
    # 设置所有GPIO为输出状态,且输出低电平
    for pin in pins:
        GPIO.setup(pin, GPIO.OUT)
        GPIO.output(pin, GPIO.LOW)
         
def gpio_destroy():
    for pin in pins:
        GPIO.output(pin, GPIO.LOW)
        GPIO.setup(pin, GPIO.IN)
         
# 连接成功回调函数
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    # 连接完成之后订阅xxxx主题
    client.subscribe("xxxx")
  
# 消息推送回调函数
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    # 获得负载中的pin 和 value
    gpio = json.loads(str(msg.payload))
  
    if gpio['pin'] in pins:
        if gpio['value'] == 0:
            GPIO.output(gpio['pin'], GPIO.LOW)
        else:
            GPIO.output(gpio['pin'], GPIO.HIGH)
  
if __name__ == '__main__':
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    gpio_setup()
     
    try:
        # 请根据实际情况改变MQTT代理服务器的IP地址
        client.connect("xxxxxxxx", 1883, 60)   #此处的xxxxxx为ip地址
        client.loop_forever()
    except KeyboardInterrupt:
        client.disconnect()
        gpio_destroy()

Baiduの空に3、コードプログラミングラズベリーパイにも、物事の仕事

コードやアイデアは、ここでCSDN著者に仕上げ:羅小龍詳細は来る:https://blog.csdn.net/Tavox/article/details/74996150

import paho.mqtt.client as mqtt
import sys
import uuid
#import Collect
import time

broker = change0'   #百度云天工物联网平台的域名地址
port = 1883
username = 'change1'# 实例用户名
password = 'change2'# 密钥
clientid = 'xxxx' + str(uuid.uuid4())  #为随机生成的id
topic = 'xxxx'    #xxxx为树莓派发布的主题名字


def on_connect(client, userdata, rc):
    print('Connected. Client id is: ' + clientid)

def on_message(client, userdata, msg):
    msg = str(msg.payload, 'utf-8')
    print('MQTT message received: ' + msg)
    if msg == 'exit':
        sys.exit()

client = mqtt.Client(clientid)
# client.will_set('temperature', 'last will', 0, False)
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username, password)
print('Connecting to broker: ' + broker)
client.connect(broker, port)
client.loop_start()
time.sleep(3)
# client.loop_forever()
client.publish(topic,payload=xxxx,qos=0)  #xxxx为你想发布的数据
#while True:      #没搞懂Collect是啥操作,具体看作者博客
#    rTHdata = test1.Collect.collect()
#    client.publish(topic, "temperture :" + str(rTHdata[0]) + " *C   " + "humidity :" + str(rTHdata[1]) + " %")
#    设置发布间隔时间
#    time.sleep(3)

4、実験コード窓側の結果を使用して

ラズベリーパイテストがない場合は、テストmosquitto窓のインストールにサーバーを使用することができます
CSDN著者からインストールしてテストする方法を:PotoYoung
https://blog.csdn.net/qq_21842575/article/details/82760335

試験検証:

ここに画像を挿入説明
実質的に上述した手順、サイクルの追加は、すべての送信3Sは、作業ものサーバMQTTに空の百度「hello_world」

結果:

受信hello_world 0
ここに画像を挿入説明
受信したhello_world 1
ここに画像を挿入説明
受信hello_world 2

それが行われます。この時点で、同じ操作ラズベリーパイは、Baiduの空の作業物事のサーバーを接続することができます

過去の記事:

使用ラズベリーPiは、自分の()を使用-DHT11温度と湿度センサーのスマートホームを建てる:https://blog.csdn.net/qq_41744697/article/details/103907582

使用、独自のスマートホーム(B)のプロトコルを使用して、ラズベリーパイビルド-MQTT
https://blog.csdn.net/qq_41744697/article/details/103908028を

リリース7件のオリジナルの記事 ウォンの賞賛2 ビュー547

おすすめ

転載: blog.csdn.net/qq_41744697/article/details/103914894