Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Particle Photon クライアントを使用したパブリッシュ

この例では、温度と湿度を測定する DHT11 センサーと、光強度を測定するアナログ光センサーを備えた Particle Photon ボードを使用する方法を説明します。測定された値は、ThingSpeak™ チャネルにパブリッシュされます。ThingSpeak に送信するセンサーの値が複数ある場合には、複数の値をチャネル フィードにパブリッシュするよう選択できます。また、センサーが 1 つだけの場合は、単一の値をチャネル フィールドにパブリッシュできます。

 完全なコードはここをクリック

  1. 新しいチャネルでデータの収集での説明に従って新しいチャネルを作成します。

  2. MQTT/MQTT.h ライブラリと Adafruit_DHT/Adafruit_DHT.h ライブラリを Particle IDE にインクルードします。次のテキストは自分で追加しないでください。ライブラリをインクルードすると、このテキストは自動的に表示されます。

    #include "Adafruit_DHT/Adafruit_DHT.h"
    #include "MQTT/MQTT.h"

  3. Particle Photon ボードで使用するセンサー ピンを定義します。

    #define DHTPIN 2                             // DHT Sensor connected to digital pin 2.
    #define DHTTYPE DHT11
    #define LIGHTPIN A0                          // Analog light sensor connected to analog pin A0.

  4. ThingSpeak との通信に使用する変数を定義します。mqttPass を MQTT API キーに変更します。これは、[Account][MyProfile] にあります。writeAPIKey をチャネルの Write API キーに変更し、channelID にチャネル番号を入力します。

    char mqttUserName[] = "TSPhotonMQTTDemo";    // Can be any name.
    char mqttPass[] = "XXXXXXXXXXXXXXXX";        // Change this to your MQTT API Key from Account > MyProfile.
    char writeAPIKey[] = "YYYYYYYYYYYYYYYY";     // Change this to your channel Write API Key.
    long channelID = 123456;                     // Change this to your channel number.
    char server[] = "mqtt.thingspeak.com";       // Define the ThingSpeak MQTT broker
    static const char alphanum[] ="0123456789"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz";                // This variable is used for random generation of client ID.
  5. MQTT クライアントのコールバック関数を定義して、DHT センサーとクライアントを初期化します。

    // Define a callback function to initialize the MQTT client.
    void callback(char* topic, byte* payload, unsigned int length) {
     }
    
    DHT dht(DHTPIN, DHTTYPE);                  // Initialize DHT sensor.
    MQTT client(server, 1883, callback);       // Initialize the MQTT client.

  6. 最後の接続時間を追跡し、グローバル変数によってパブリッシュ データの時間間隔を定義します。

    unsigned long lastConnectionTime = 0;
    const unsigned long postingInterval = 20L * 1000L; // Post data every 20 seconds. 

  7. setup メソッドで DHT センサーの入力ピンを初期化します。

    void setup() {
        
        pinMode(DHTPIN, INPUT);
        
    }

  8. メインの loop メソッド内で MQTT の接続を確立し、一定の時間間隔でデータをチャネルにパブリッシュします。

    void loop() {
        
        // If MQTT client is not connected then reconnect.
        if (!client.isConnected())
        {
          reconnect();
        }
        
        client.loop();  // Call the loop continuously to establish connection to the server.
        
        if (millis() - lastConnectionTime > postingInterval)
        {
            mqttpublish();
        }
    }

  9. reconnect メソッドで一意のクライアント ID を生成し、Particle Photon MQTT クライアントを ThingSpeak の MQTT ブローカーに接続します。

    void reconnect(){
        
         char clientID[9];
         
         Serial.println("Attempting MQTT connection");
            // Generate ClientID
            for (int i = 0; i < 8; i++) {
                clientID[i] = alphanum[random(51)];
            }
            clientID[8]='\0';
            
            // Connect to the ThingSpeak MQTT broker.
            if (client.connect(clientID,mqttUserName,mqttPass))  {
                Particle.publish("Conn:"+ String(server) + " cl: " + String(clientID)+ " Uname:" + String(mqttUserName));
            } else
            {
                Particle.publish("Failed to connect, Trying to reconnect in 5 seconds");
                delay(5000);
            } 
    }

  10. mqttpublish メソッドを使用して、ThingSpeak チャネル フィードにセンサー データをパブリッシュします。チャネル フィードにパブリッシュする場合、複数のフィールドに一度にパブリッシュできます。ここでは、チャネルの Field 1、2、および 3 にパブリッシュします。センサーが 1 つのみの場合は、単一のフィールドに直接パブリッシュできます。この構文は、次に示すコードではコメント化されています。単一のフィールドに直接パブリッシュするには、String で始まる 2 行のコメントを切り替えてください。

    void mqttpublish() {
        
        float t = dht.getTempFarenheit(); // Read temperature from DHT sensor.
        float h = dht.getHumidity();  // Read humidity from DHT sensor.
        int lightLevel = analogRead(LIGHTPIN); // Read from light sensor.
        
        // Create data string to send data to ThingSpeak.
        // Use these lines to publish to a channel feed,
        // which allows multiple fields to be updates simultaneously.
        // Comment these lines and use the next two to publish to a single channel field directly.
        String data = String("field1=" + String(t) + "&field2=" + String(h) + "&field3=" + String(lightLevel));
        String topic = String("channels/"+String(channelID)+ "/publish/"+String(writeAPIKey));
        
        //String data=String(t);
        //String topic = String("channels/"+String(channelID)+ "/publish/fields/field1/"+String(writeAPIKey));
        
        client.publish(topic,data);
        
        lastConnectionTime = millis();
    }

参考

|

関連する例

詳細