動機
M5Stackを使って文字がスクロールする電光掲示板を作ってます。
スクロールする文字列を可変にしたくて、簡単な手法を思いつきました。
Chatworkの特定のルームに投稿した内容を使って文字列を変更する方法です。
成果物
気に入っているので、記録に残します。
サンプルコード
#include <M5Stack.h>
#include <M5GFX.h>
M5GFX display;
M5Canvas canvas(&display);
#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
const char *SSID = "myssid";
const char *PASSWORD = "mypassword";
String BASE_URL = "https://api.chatwork.com/v2/rooms/";
String ROOM_ID = "xxxxxx"; //RoomID
String MYTOKEN = "xxxxxxxx"; //Chatwork Token
String URL = BASE_URL + ROOM_ID + "/messages";
void chatwork_read()
{
//HTTPClientでGET
HTTPClient httpclient;
httpclient.begin(URL.c_str());
httpclient.addHeader("x-chatworktoken", MYTOKEN.c_str());
int httpCode = httpclient.GET();
Serial.println(httpCode);
if (httpCode==200)
{
String payload = httpclient.getString();
JSONVar jsondata;
jsondata=JSON.parse(payload); // JSON形式データの読み込み
String body = jsondata[0]["body"];
display.clear(TFT_BLACK);
display.setTextColor(YELLOW, BLACK);
display.setCursor(0, 0);
display.println(body);
}
httpclient.end(); //HTTPClient終了
delay(1000);
}
void setup()
{
M5.begin();
display.begin();
if (display.width() < display.height())
{
display.setRotation(display.getRotation() ^ 1);
}
display.clear(TFT_BLACK);
display.setCursor(0, 0);
display.setFont(&fonts::lgfxJapanMinchoP_32);
display.println("電光掲示板");
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(".");
}
Serial.println("\nWiFi connect: OK ");
}
void loop(){
M5.update();
if ( M5.BtnA.wasReleased() )
{ // 「Aボタンを押す」と表示切替
Serial.println("BtnA");
chatwork_read();
}
delay(1);
}
思いついた経過
ESP32にデータ(この場合は文字列)をスマホ等から送る場合は、
- ESP32側にWebサーバー機能を作成し、スマホからアクセスして渡す
- blynk等のアプリから渡す
などの方法があるのは知っているのですが、コードが煩雑だったり、アプリの使い方をマスターする必要があったりと、わたしにはハードルが高かったのです。
また、電光掲示板は、他の人にも使ってもらう予定なので、出来る限り簡単に使える方法を模索していました。
たまたま、マイコンの測定値をグーグルスプレッドシートに飛ばして蓄積し、GASでデータを処理させて、Chatworkに日報を送らせる、というシステムを作っていて、ChatworkAPIならマイコン側から投稿文を読みに行かせることもできることを知りました。
そこで思いついてしまいました。
スマホからマイコンへ送るのはハードルが高いけれど、マイコンからChatworkとかを読みに行くのは簡単やん。
その思い付きから作ったのが、上に記載したコードです。
できるようになったこと
これで、
- 電光掲示板に表示したい文章を、Chatworkの「電光掲示板」Roomに投稿する。
- M5Stackのボタンを押す。
たったこれだけで、メッセージを更新できるようになりました!
ボタンを押すのも手間だったり、離れたところにM5Stackが置いてある場合は、定期的に読みに行くコードを書けば、省けます。
ちなみにChatworkAPIは5分間で300回の制約があるようです。十分ですね。
めんどうなアプリもサーバーも不要です。
Chatworkさえスマホに入れていれば、完結します。
大満足。
以上です。