chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

WioTerminalのポートにLEDを接続してLチカさせたい

目的:WioTerminalの背面ポートをArduinoでプログラミングできるように理解する
取り組み:組み込みの基本である、Lチカをやってみる
結果:背面のポートからケーブルを引き出してLチカができた。全面についている5WAYのスイッチとも組み合わさって動作

詳細:
Wio Terminalの背面に拡張ポートが出ていて、ここから温湿度センサを接続したい。が、、ポート名がよくわからない。Arduinoの作法に従って指定する必要があるような、、GPIOXXで指定できたら楽だけどどうもそうはなっていない様だ。
見るべきソースは、vriant.hらしく、このヘッダファイルでポート名が定義されているらしい

ArduinoCore-samd/variant.h at master · Seeed-Studio/ArduinoCore-samd · GitHub

本当は、マイコンのGPIOのPinNoまで追いかけたいところだが、、時間もないので、ポートの3番ピン(BCM2)でLチカしてみる
BCM2はvariant.hで46と定義されている。46とは何だろうか。。ソースでBCM2と指定したらポート3番にアクセスできるようである。

#define BCM2 (46ul)

外付けLEDを点滅させるサンプルコードは、おおよそ以下。5wayのSWと自動点滅を組み合わせている

#include <Arduino.h>

#define SERIAL_SPEED 115200

void setup() {
  // put your setup code here, to run once:
  Serial.begin(SERIAL_SPEED);
  delay(10);

    pinMode(BCM2, OUTPUT); //Configure BCM2 as Digital port and OUTPUT
    pinMode(WIO_5S_UP, INPUT_PULLUP);
    pinMode(WIO_5S_DOWN, INPUT_PULLUP);

}

void loop() {

  static int led_on = 0;

  // put your main code here, to run repeatedly:
  Serial.println("loop.");
  if (digitalRead(WIO_5S_UP) == LOW) {

    Serial.println("5 Way UP!!");
    led_on = 1;

  } else if (digitalRead(WIO_5S_DOWN) == LOW) {

    Serial.println("5 Way Down!!");
    led_on = 0;

  } else {

    Serial.println("no press,");
    Serial.println("auto blink");
    if(led_on == 1){
      led_on = 0;
    }else{
      led_on = 1;
    }

  }

  // LED On or Off
  //
  if(led_on != 0){
    Serial.print("LED ON");
    digitalWrite(BCM2, HIGH);
  }else{
    Serial.print("LED OFF");
    digitalWrite(BCM2, LOW);
  }

  delay(1000);   // delay 1sec

}

全面ボタンPRESSで高速にLEDがチカチカするターボモード付き版

#include <Arduino.h>

#define SERIAL_SPEED 115200

void setup() {
  // put your setup code here, to run once:
  Serial.begin(SERIAL_SPEED);
  delay(10);

    pinMode(BCM2, OUTPUT); //Configure BCM2 as Digital port and OUTPUT
    pinMode(WIO_5S_UP, INPUT_PULLUP);
    pinMode(WIO_5S_DOWN, INPUT_PULLUP);
    pinMode(WIO_5S_PRESS, INPUT_PULLUP);



}

void loop() {

  static int led_status = 0;
  static int turbo_on = 0;
  static int sw = 0;       // 1:on -1:off  0:null(open)

  // put your main code here, to run repeatedly:
  Serial.println("loop.");
  if (digitalRead(WIO_5S_UP) == LOW) {

    Serial.println("5 Way UP!!");
    sw = 1;  // sw on

  } else if (digitalRead(WIO_5S_DOWN) == LOW) {

    Serial.println("5 Way Down!!");
    sw = -1;  // sw off

  } else if (digitalRead(WIO_5S_PRESS) == LOW) {

    Serial.println("5 Way PRESS!!");
    turbo_on = 1;
    sw = 0;

  } else {

    sw = 0;
    turbo_on = 0;

  }
  

  //
  // set LED on or off
  //
  if(sw == 1){
    Serial.print("LED ON");
    digitalWrite(BCM2, HIGH);
    led_status = 1;
  }else if(sw == -1){
    Serial.print("LED OFF");
    digitalWrite(BCM2, LOW);
    led_status = 0;
  }else{
    Serial.print("LED blink:");
    if(led_status ==  0){
      Serial.print("LED ON");
      digitalWrite(BCM2, HIGH);
      led_status = 1;
    }else{
      Serial.print("LED OFF");
      digitalWrite(BCM2, LOW);
      led_status = 0;
    }
  }

  //
  // set interval
  //
  if(turbo_on == 1){
    delay(50);   // delay 50msec
  }else{
    delay(500);   // delay 0.5sec
  }
}

■参考URL
IoT何をいまさら(67) ようやく納得、Wio Terminalのピンアサイン | デバイスビジネス開拓団
https://wiki.seeedstudio.com/Wio-Terminal-IO-Digital/