M5Stack CAT-M Unit にpovo を挿し、インターネットから画像をダウンロードし画面表示/印刷

http://dl.ftrans.etr.jp/?897f9b44a210470ca7448f51f592db27a0164fe5 http://dl.ftrans.etr.jp/?0a55cc7c42974b0494a1354558d2663e17e8f3dd


 ボードマネージャの選択が M5Stack ATOM だったらプリンターに、それ以外だったら液晶に、それぞれ出力するサンプルです。
 どちらも LovyanGFX を用いますが、プリンターの場合は 2021/12/31 時点では developブランチ が必要です。
 また、プリンターの場合は更に拙作の LGFX_PrinterAddon も必要です。


 その他 TinyGSMArduinoHttpClient も利用しています。

/*
    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);
}

M5Stack の SIM7080G-CAT-M-NB-IOT-UNIT で pivo を使う

 128kbps だったら無料、という 0sim を彷彿させるSIMカードau から登場。


 3000円ほどで売られている SIM7080G-CAT-M-NB-IOT-UNIT に挿してみたら、あっさり動作してしまったのでソースとか貼っておく。
SIM7080G CAT-M/NB-IoT Unitshop.m5stack.com

http://dl.ftrans.etr.jp/?1fa95246839d4cf39a21b4367cf32091af1be056

#define TINY_GSM_MODEM_SIM7080
#define TINY_GSM_RX_BUFFER 650  // なくても動いたけど、あったほうが安定する気がする
#define TINY_GSM_YIELD() { delay(2); } // なくても動いたけど、あったほうが安定する気がする
#include <TinyGsmClient.h>

#define apn "povo.jp"
#define server "api.wakwak-koba.jp"
#define port 80
#define url "/test/"

TinyGsm        modem(Serial1);
TinyGsmClient  client(modem);

void setup() {
  Serial.begin(115200);
  Serial1.begin(9600, SERIAL_8N1, 32, 26);  // ATOM LITE

  delay(1000);
  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);
      if (client.connect(server, port)) {
        Serial.print("get ");
        Serial.println(url);
        client.println();
        
        client.printf("GET %s HTTP/1.1\r\n", url);
        client.printf("Host: %s\r\n", server);
        client.print("Connection: close\r\n\r\n");
        client.println();

        while (client.connected())
          while (client.available())
            Serial.print((char)client.read());
          
        Serial.println();
        client.stop();
        modem.gprsDisconnect();
      }
    }
  }
    
  Serial.println("disconnected");
}

void loop() {
  delay(1);
}