各記事リンク
本編へ
以前の記事からの続きで,前回までに用意・確認したCloudMQTT環境を使います.
また送信プログラムのテストにNode-REDを使用します.
それらについては以前の記事を参照してください.
環境
- Raspberry Pi 3 Model B (2台)
- Raspbian stretch 9.4
- Ethernetでそれぞれインターネットに接続
Mosquittoライブラリ
Mosquittoとは
本記事で作成するMQTTクライアントのC言語プログラムはMosquittoというライブラリを用いています.
MosquittoはEclipseプロジェクトによるMQTTの実装で,非常に多くの場所で使用されています.
Mosquittoライブラリを用いたC言語プログラムを作ることで,簡単に通信を実装できます.
Mosquittoのインストール方法
まず,Raspberry PiにMosquittoライブラリをインストールする必要があります.
ターミナルで以下のコマンドを実行することでできました(こちらを参考にしています).
sudo apt-get install software-properties-common sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa sudo apt-get install libmosquitto-dev
2行目でエラーっぽい表記がでたのですが,3行目の準備なので,3行目が実行できたのであれば問題ないかと.
私はこの手順で無事使用できました.
送信プログラム
送信側のRaspberry Piで以下のCプログラムを作成してください.
ファイル名はなんでも構いませんが,私は「MQTTpub.c」としました.
#include <stdio.h> #include <stdlib.h> #include <string.h> //strlen(); #include <unistd.h> //sleep(); #include <signal.h> //signal(); //mosquittoライブラリが必要です //$ sudo apt-get install software-properties-common //$ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa //$ sudo apt-get install libmosquitto-dev #include <mosquitto.h> void endCatch(int); struct mosquitto *mosq; int main() { //↓↓↓ここからを編集する↓↓↓ //MQTT Brokerの設定 (CloudMQTT) const char *ip = "ほげほげ.cloudmqtt.com"; //サーバのIPアドレスまたはドメイン名 const int port = 54321; //サーバのポート番号 const char *username = "username"; //サーバのユーザネーム const char *password = "password"; //サーバのパスワード //MQTTの設定 const char *id = "RasPi1"; //発信者ごとに変える const char *topic = "topic1/sub1"; //送信するデータを区別するためのもの(受信側と統一する) const char *message = "Hello MQTT"; //送信文字列 //↑↑↑ここまでを編集する↑↑↑ //Ctrl + Cなどによって強制終了するときに、終了時用の処理を呼び出す設定 signal(SIGINT , endCatch ); printf("Prepareing mosquitto...\n"); //mosquittoの最初に呼び出す初期化関数 mosquitto_lib_init(); //mosquitto実態の作成 mosq = mosquitto_new(id, 0, NULL); //失敗してたら if(!mosq){ perror("Failed to create mosquitto\n"); mosquitto_lib_cleanup(); return -1; } //ユーザ名、パスワードを教える mosquitto_username_pw_set(mosq, username, password); //サーバーに登録する mosquitto_connect(mosq, ip, port, 60); printf("Server connected!\n"); //送信処理 while(1) { mosquitto_publish(mosq, NULL, topic, strlen(message) , message, 0, 0 ); printf("Publish \"%s\" about \"%s\" from %s to %s:%d\n", message, topic, id, ip, port ); sleep(1); } return 0; } //プログラム終了時の処理 void endCatch(int sig) { mosquitto_destroy(mosq); mosquitto_lib_cleanup(); printf("End Program\n\n"); exit(0); }
これをコマンドでビルドします.
Cファイルを作成した場所で以下のコマンドを実行します.
gcc MQTTpub.c -o MQTTpub -lmosquitto
コマンドの意味は * gcc : C言語をビルドするコマンド * MQTTpub.c : Cのファイル名(自分で作成したもの) * -o : ビルドした後の実行ファイルの名前を指定 * MQTTpub : ビルドした後の実行ファイルの名前 * -lmosquitto : ライブラリ「mosquitto」を使用する
です.
エンターキーを押して,エラーなどが出なければ成功です.
以下のコマンドでプログラムを実行します.
sudo ./MQTTpub
以下のように1秒ごとに表示されれば送信できていることになります.
送信プログラムのチェック
送信プログラムをチェックします.
受信側のRaspberry PiでNode-REDを立ち上げて,受信側の構成を作ってください(以前の記事を参照).
デプロイ後にデバッグの欄に「Hello MQTT」が1秒ごとに表示されていれば成功です.
次に受信プログラムを示します.
参考
MQTT Client -C言語- - Qiita http://altenergy-system.com/archives/4172