目的: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/