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