WeMosを使ってみる

RaspberryとのMQTT通信(Raspberry→WeMos)

Paho MQTT C Client編


前回、「paho-mqtt pythonライブラリ」を使って、WeMosとのMQTT通信を紹介しました。
そこで、今回はRaspberryのPublisherをC言語で作ってみます。
必要なライブラリのインストールはこちらを参照してください。

C言語のコードはこ ちらに掲載されているほぼそのままです。
コンパイルは「cc -o test2 test2.c -l paho-mqtt3c」です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "MQTTClient.h"

#define ADDRESS     "tcp://broker.hivemq.com:1883"
#define TOPIC       "nopnop2002"
#define QOS         1
#define TIMEOUT     10000L

int main(int argc, char* argv[])
{
    MQTTClient client;
    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
    MQTTClient_message pubmsg = MQTTClient_message_initializer;
    MQTTClient_deliveryToken token;
    int rc;
    char clientId[40];
    char payload[40];
    int i;

    pid_t c_pid = getpid();
    sprintf(clientId, "CLIENT-%d", c_pid);
    printf("clientId=%s\n", clientId);
    MQTTClient_create(&client, ADDRESS, clientId, MQTTCLIENT_PERSISTENCE_NONE, NULL);
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;

    if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
    {
        printf("Failed to connect, return code %d\n", rc);
        exit(-1);
    }

    strcpy(payload,"1010");;
    for(i=0;i<4;i++) {
      pubmsg.payload = &payload[i];
      pubmsg.payloadlen = 1;
      pubmsg.qos = QOS;
      pubmsg.retained = 0;
      MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
      printf("Waiting for up to %d seconds for publication\n"
            "on topic %s for client with ClientID: %s\n",
            (int)(TIMEOUT/1000), TOPIC, clientId);
      rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
      printf("Message with delivery token %d delivered\n", token);
      sleep(2);
    }
    MQTTClient_disconnect(client, 10000);
    MQTTClient_destroy(&client);
    return rc;
}

このプログラムを実行すると、前回と同様にWeMosのオンボードのLEDがLチカします。

Brokerに繋がりさえすれば、世界中のどのコンピュータから実行しても、自宅のWeMosをLチカすることができます。

続く
....