M5Stack CAT-M Unit にpovo を挿し、インターネットから画像をダウンロードし画面表示/印刷
ボードマネージャの選択が M5Stack ATOM だったらプリンターに、それ以外だったら液晶に、それぞれ出力するサンプルです。
どちらも LovyanGFX を用いますが、プリンターの場合は 2021/12/31 時点では developブランチ が必要です。
また、プリンターの場合は更に拙作の LGFX_PrinterAddon も必要です。
その他 TinyGSM と ArduinoHttpClient も利用しています。
/* https://twitter.com/wakwak_koba/ */ #define TINY_GSM_MODEM_SIM7080 #define TINY_GSM_RX_BUFFER 1500 #define TINY_GSM_YIELD() { delay(1); } #include <TinyGsmClient.h> #include <ArduinoHttpClient.h> # define apn "povo.jp" # define server "t.wakwak-koba.jp" # define port 80 # define url "/garakuta/monodora.png" TinyGsm modem(Serial1); TinyGsmClient client(modem); # define LGFX_USE_V1 # define LGFX_AUTODETECT #include <LovyanGFX.hpp> # if defined(ARDUINO_M5Stack_ATOM) #include <SerialPrinter.hpp> #include <printer/aiebcy/EM5820.hpp> static lgfx_addon::SerialPrinter<lgfx_addon::aiebcy::EM5820> output(&Serial2, 192, 19); # else static LGFX output; # endif void setup() { Serial.begin(115200); # if defined(ARDUINO_M5Stack_ATOM) Serial1.begin(9600, SERIAL_8N1, 32, 26); // CAT-M Unit Serial2.begin(9600, SERIAL_8N1, 33, 23); // ATOM Printer # else Serial1.begin(9600, SERIAL_8N1, 22, 21); // CAT-M Unit # endif delay(5000); Serial.println("restart modem"); modem.restart(); Serial.println("wait for network connected "); //modem.gprsConnect(apn, "", ""); // 初回だけ必要かも if (modem.waitForNetwork() && modem.isNetworkConnected()) { Serial.print("connecting to "); Serial.println(apn); modem.gprsConnect(apn, "", ""); if(modem.isGprsConnected()) { Serial.print("connecting to "); Serial.println(server); auto httpClient = HttpClient(client, server, port); Serial.print("get "); Serial.println(url); httpClient.get(url); auto statusCode = httpClient.responseStatusCode(); auto contentLength = httpClient.contentLength(); Serial.printf("StatusCode:%d", statusCode); Serial.println(); Serial.printf("contentLength:%d", contentLength); Serial.println(); output.init(); output.clear(TFT_WHITE); uint8_t* buf = new uint8_t[contentLength]; if(buf != nullptr) { httpClient.read(buf, contentLength); output.drawPng(buf, contentLength); delete []buf; } else { lgfx::StreamWrapper stream; stream.set(&httpClient, contentLength); output.drawPng(&stream); } output.setTextColor(TFT_BLACK); output.setFont(&fonts::Font4); output.setTextDatum(textdatum_t::top_right); output.drawString("HELLO", output.width() - 1, 0); output.drawString("DORAEMON", output.width() - 1, 30); # if defined(ARDUINO_M5Stack_ATOM) output.display(); # endif httpClient.stop(); modem.gprsDisconnect(); } } Serial.println("disconnected"); } void loop() { delay(1); }