MQTT を受信して ボードの LED の点灯色を変える

![IMG_20210811_102621.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/b3a28f52-3a58-b814-d05c-22a8d25c5616.jpeg)

こちらのプログラムを改造しました。
[Grove IoT スターターキット for SORACOM で MQTT クライアントを使う](https://qiita.com/ekzemplaro/items/b9b7b178471d700e3ffc)

## フォルダー構造

```text
$ tree mqtt_led/
mqtt_led/
├── mqtt_led.ino
├── setupLTE.ino
└── setup_mqtt.ino
```

## プログラム

```text:mqtt_led.ino
// ---------------------------------------------------------------
/*
	mqtt_led.ino

					Aug/20/2021
*/
// ---------------------------------------------------------------
#include <WioLTEforArduino.h>
#include <WioLTEClient.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <stdio.h>

#define MQTT_SERVER_HOST  "example.com"
#define MQTT_SERVER_PORT  (1883)

#define ID                "WioLTE"
#define OUT_TOPIC         "sample/imageTopic"
#define IN_TOPIC          "sample/imageTopic"

#define INTERVAL          (60000)

WioLTE Wio;
WioLTEClient WioClient(&Wio);
PubSubClient MqttClient;

DynamicJsonDocument doc(1024);

int icount = 0;
// ---------------------------------------------------------------
void callback(char* topic, byte* payload, unsigned int length) {
	SerialUSB.println("");
	payload[length] = '\0';
	String msg = String((char*) payload);
	SerialUSB.println(msg);
	deserializeJson(doc, msg);	
	const char* led = doc["led"];
	SerialUSB.println(led);
	
	if (strstr(led,"green")) {	
		SerialUSB.println("*** green ***");
		Wio.LedSetRGB(0, 1, 0); 
		}
	else if (strstr(led,"yellow")) {	
		SerialUSB.println("*** yellow ***");
		Wio.LedSetRGB(1, 1, 0); 
		}
	else if (strstr(led,"red")) {	
		SerialUSB.println("*** red ***");
		Wio.LedSetRGB(1, 0, 0);
		}
	else if (strstr(led,"white")) { 
		SerialUSB.println("*** white ***");
		Wio.LedSetRGB(1, 1, 1);
		}
}

// ---------------------------------------------------------------
void setup() {
	setupLTE();

	setup_mqtt_proc();

	Wio.LedSetRGB(1, 1, 1); 
	SerialUSB.println("*** Setup completed *** Aug/20/2021 AM 09:54 ***");
}


// ---------------------------------------------------------------
void loop()
{
	DynamicJsonDocument doc(512);
	char data_json[128];

	if ((icount % 1000) == 0)
		{
		doc["icount"] = icount;
		doc["uptime"] = millis() / 1000;
		serializeJson(doc, data_json);

		SerialUSB.println(data_json);
		}

	MqttClient.loop();

	icount++;
}

// ---------------------------------------------------------------
```

setupLTE.ino はこちら
[UDP で温度と湿度を Harvest に送る](https://qiita.com/ekzemplaro/items/690faa6f56003272299f)

setup_mqtt.ino はこちら
[ブラウザーから MQTT Publish でブザーを鳴らす](setupLTE.ino はこちら)


緑を点灯させるコマンド

```bash:go_green.sh
BROKER="broker.emqx.io"
#
echo $BROKER
message='{"led": "green"}'
mosquitto_pub -d -t orz -m "${message}" \
	-h  $BROKER --topic example/testTopic
```

黄色を点灯させるコマンド

```bash:go_yellow.sh
BROKER="broker.emqx.io"
#
echo $BROKER
message='{"led": "yellow"}'
mosquitto_pub -d -t orz -m "${message}" \
    -h  $BROKER --topic example/testTopic
```

赤を点灯させるコマンド

```bash:go_red.sh
BROKER="broker.emqx.io"
#
echo $BROKER
message='{"led": "red"}'
mosquitto_pub -d -t orz -m "${message}" \
    -h  $BROKER --topic example/testTopic
```

## Arduino IDE
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/6e893dba-982d-8a50-7c8d-f1748c6f05c5.png)