C言語でMQTT通信
はじめに
頭のいい人が作ったMQTTライブラリを使って、ローカル環境でMQTT通信してみます。
ローカル環境
MQTT brokerのインストール
MQTT通信をやるためにはMQTT brokerと呼ばれるサーバを動作させておく必要があるみたい。
- Homebrewを使ってインストールします。
brew install mosquitto
- 以下のコマンドでサーバを立ち上げます。
/usr/local/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf
MQTTライブラリのインストール
opensslというライブラリも必要ですので一緒にインストールします。
brew install openssl git clone https://github.com/eclipse/paho.mqtt.c.git
サンプルコードの変更、ビルドとインストール
paho.mqtt.c/src/samples
にMQTTClient_publish.c
とMQTTClient_subscribe.c
があるのでこちらを使用します。
今回はローカルで通信するので、どちらのソースコードも通信するアドレスを以下のように変更します。
#define ADDRESS "127.0.0.1:1883"
ライブラリのトップディレクトリでビルドとインストールを行います。
cd paho.mqtt.c make make install
make
でMakefileに従ったビルドを行います。make install
をすることでOSの共有includeディレクトリにライブラリがインストールされ、ライブラリとして使用することが可能になります。
Publish, Subscribeしてみる
paho.mqtt.c/build/output/samples/
に実行ファイルができてます。
MQTTClient_publish
でPublishして、MQTTClient_subscribe
でSubscribeしてみましょう。
- Subscribeで待ち受ける
./MQTTClient_subscribe
- Publishで3回メッセージを送ってみました
./MQTTClient_publish ./MQTTClient_publish ./MQTTClient_publish
- 実行結果(Sub側)
Message arrived topic: MQTT Examples message: Hello World! Message arrived topic: MQTT Examples message: Hello World! Message arrived topic: MQTT Examples message: Hello World!
- 実行結果(Pub側)
iMac:samples user$ ./MQTTClient_publish Waiting for up to 10 seconds for publication of Hello World! on topic MQTT Examples for client with ClientID: ExampleClientPub Message with delivery token 0 delivered iMac:samples user$ ./MQTTClient_publish Waiting for up to 10 seconds for publication of Hello World! on topic MQTT Examples for client with ClientID: ExampleClientPub Message with delivery token 0 delivered iMac:samples user$ ./MQTTClient_publish Waiting for up to 10 seconds for publication of Hello World! on topic MQTT Examples for client with ClientID: ExampleClientPub Message with delivery token 0 delivered
ちなみにMQTT brokerを立ち上げたターミナルでは以下のようなログが出ます。
1615900025: mosquitto version 2.0.9 starting 1615900025: Config loaded from /usr/local/etc/mosquitto/mosquitto.conf. 1615900025: Starting in local only mode. Connections will only be possible from clients running on this machine. 1615900025: Create a configuration file which defines a listener to allow remote access. 1615900025: Opening ipv4 listen socket on port 1883. 1615900025: Opening ipv6 listen socket on port 1883. 1615900025: mosquitto version 2.0.9 running 1615900030: New connection from 127.0.0.1:62674 on port 1883. 1615900030: New client connected from 127.0.0.1:62674 as ExampleClientSub (p2, c1, k20). 1615900035: New connection from 127.0.0.1:62676 on port 1883. 1615900035: New client connected from 127.0.0.1:62676 as ExampleClientPub (p2, c1, k20). 1615900035: Client ExampleClientPub disconnected. 1615900036: New connection from 127.0.0.1:62677 on port 1883. 1615900036: New client connected from 127.0.0.1:62677 as ExampleClientPub (p2, c1, k20). 1615900036: Client ExampleClientPub disconnected. 1615900037: New connection from 127.0.0.1:62679 on port 1883. 1615900037: New client connected from 127.0.0.1:62679 as ExampleClientPub (p2, c1, k20). 1615900037: Client ExampleClientPub disconnected.
参考記事様方
最後に
本当は今回やったことをAndroid上でやりたかったのでした。 頭のいい人教えて下さい。完