Wio Terminal を使ってみた
なんとSeeed様よりWio Terminalを提供いただきました!
本当にありがとうございます!
目次
Wio Terminal
Wio TerminalはLCD、BluetoothやWiFi、赤外線や照度センサなど
その他もろもろがパッケージングされた多機能マイクロコントローラです。
紹介しきれないので以下を参照くださいw
Wio Terminal到着
Wio TerminalにはUSB-Cケーブルと説明書が同梱されておりました。
LCDディスプレイの保護シートをはがして使用します。
ちなみに裏面の赤外線LEDや照度センサ用の透明窓にも保護シートが貼ってありますのでお気を付けください。
早速傷つけたかと焦った😅
裏の透明のトコにも保護フィルム貼ってあったのね pic.twitter.com/yHi3o7Pla6— HomeMadeGarbage (@H0meMadeGarbage) May 13, 2020
技適もバッチリです!!
USB-CケーブルをPCと接続して側面の電源スイッチをONするとWio Terminalが起動し、初期状態ではゲームが始まります。
クソ難しい#WioTerminal pic.twitter.com/Mt4FftfgGa
— HomeMadeGarbage (@H0meMadeGarbage) May 13, 2020
くそ難しいので、すぐ諦めました。。。。
次行きましょう!
Arduino設定
Arduino IDEでコーディングするべく環境設定します。
設定方法は以下の通りです。
https://wiki.seeedstudio.com/Wio-Terminal-Getting-Started/#getting-started
私は先日Seeed社の超小型マイコン Seeeduino XIAOを購入しArduino環境の設定を実施したのですでにWio Terminalも使える状態でした。
ここではWio Terminalの機能の一部を使用して色々試してみましたので紹介させてください。
照度センサ
照度センサの値でディスプレイの色の輝度をコントロールしてみました。
ディスプレイと照度センサの
バリエーション#WioTerminal pic.twitter.com/ddJwnuGqxQ— HomeMadeGarbage (@H0meMadeGarbage) May 13, 2020
Arduinoコード
照度センサについては以下を参考にしました。
https://wiki.seeedstudio.com/Wio-Terminal-Light/
ディスプレイ表示については以下を参考にしました。
https://wiki.seeedstudio.com/Wio-Terminal-LCD-Basic/
また以下のライブラリが必要になりますので
・Seeed_Arduino_LCD
・Adafruit Zero DMA
LCD概要ページを参考に導入してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include"TFT_eSPI.h" TFT_eSPI tft; #define LCD_BACKLIGHT (72Ul) void setup() { tft.begin(); tft.setRotation(3); pinMode(WIO_LIGHT, INPUT); Serial.begin(115200); } void loop() { int light = analogRead(WIO_LIGHT); Serial.print("Light value: "); Serial.println(light); delay(50); if(light > 50){ digitalWrite(LCD_BACKLIGHT, HIGH); tft.fillScreen(map(light, 0, 1023, 0, 31)); }else{ tft.fillScreen(0); digitalWrite(LCD_BACKLIGHT, LOW); } } |
照度センサの値(0~1023)をディスプレイの青色の輝度(0~31)に変換して表示します。
照度センサの値が50以下の場合にはディスプレイのバックライトをOFFしています。
ブザーで楽器
上部の3つのボタンと前面の5Wayスイッチでメロディーを奏でる楽器を作ってみました。
ボタンとブザー#WioTerminal pic.twitter.com/bon2Xuxcf8
— HomeMadeGarbage (@H0meMadeGarbage) May 13, 2020
ボタンとスイッチに音階(C, D, E, F, G, A, B, C)を割り振って
ディスプレイにも表示させています。
Arduinoコード
文字表示については以下を参考にしました。
https://wiki.seeedstudio.com/Wio-Terminal-LCD-Fonts/
ボタンと5Wayスイッチ、ブザーについては以下を参考にしました。
https://wiki.seeedstudio.com/Wio-Terminal-Buttons/
https://wiki.seeedstudio.com/Wio-Terminal-Switch/
https://wiki.seeedstudio.com/Wio-Terminal-Buzzer/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
#include"TFT_eSPI.h" #include"Free_Fonts.h" //include the header file #define BUZZER_PIN WIO_BUZZER TFT_eSPI tft; int state = 0; void setup() { tft.begin(); tft.setRotation(3); tft.fillScreen(TFT_BLACK); tft.setFreeFont(FSSBO24); Serial.begin(115200); pinMode(WIO_KEY_A, INPUT_PULLUP); pinMode(WIO_KEY_B, INPUT_PULLUP); pinMode(WIO_KEY_C, INPUT_PULLUP); pinMode(WIO_5S_UP, INPUT_PULLUP); pinMode(WIO_5S_DOWM, INPUT_PULLUP); pinMode(WIO_5S_LEFT, INPUT_PULLUP); pinMode(WIO_5S_RIGHT, INPUT_PULLUP); pinMode(WIO_5S_PRESS, INPUT_PULLUP); pinMode(BUZZER_PIN, OUTPUT); } void loop() { if (digitalRead(WIO_KEY_C) == LOW) { state = 1; tft.fillScreen(TFT_BLACK); tft.drawString("C",140,100); playTone(1915, 500); } else if (digitalRead(WIO_KEY_B) == LOW) { tft.fillScreen(TFT_BLACK); tft.drawString("D",140,100); playTone(1700, 500); } else if (digitalRead(WIO_KEY_A) == LOW) { state = 3; tft.fillScreen(TFT_BLACK); tft.drawString("E",140,100); playTone(1519, 500); }else if (digitalRead(WIO_5S_UP) == LOW) { state = 4; tft.fillScreen(TFT_BLACK); tft.drawString("F",140,100); playTone(1432, 500); } else if (digitalRead(WIO_5S_DOWM) == LOW) { state = 5; tft.fillScreen(TFT_BLACK); tft.drawString("G",140,100); playTone(1275, 500); } else if (digitalRead(WIO_5S_LEFT) == LOW) { state = 6; tft.fillScreen(TFT_BLACK); tft.drawString("A",140,100); playTone(1136, 500); } else if (digitalRead(WIO_5S_RIGHT) == LOW) { state = 7; tft.fillScreen(TFT_BLACK); tft.drawString("B",140,100); playTone(1014, 500); } else if (digitalRead(WIO_5S_PRESS) == LOW) { state = 8; tft.fillScreen(TFT_BLACK); tft.drawString("C",140,100); playTone(956, 500); }else{ tft.fillScreen(TFT_BLACK); } } void playTone(int tone, int duration) { for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(BUZZER_PIN, HIGH); delayMicroseconds(tone); digitalWrite(BUZZER_PIN, LOW); delayMicroseconds(tone); } } |
TVリモコン
赤外線LEDでTVリモコン操作を試してみました。
5Wayスイッチの上下で音量を、プッシュで電源操作します。
赤外線もバシバシでとる#WioTerminal #テレビリモコン pic.twitter.com/zmRBWO0Mog
— HomeMadeGarbage (@H0meMadeGarbage) May 13, 2020
Arduinoコード
文字表示については以下を参考にしました。
https://wiki.seeedstudio.com/Wio-Terminal-Infrared-Emitter/
我が家のリモコンコードは以前にAlexaでTV操作をする際に調査済みです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
#include"TFT_eSPI.h" #include"Free_Fonts.h" //include the header file #include <IRLibSendBase.h> // First include the send base //Now include only the protocols you wish to actually use. //The lowest numbered protocol should be first but remainder //can be any order. #include <IRLib_P01_NEC.h> #include <IRLib_P02_Sony.h> #include <IRLibCombo.h> // After all protocols, include this TFT_eSPI tft; IRsend mySender; void setup() { Serial.begin(115200); tft.begin(); tft.setRotation(3); tft.fillScreen(TFT_BLACK); tft.setFreeFont(FSSBO24); pinMode(WIO_5S_UP, INPUT_PULLUP); pinMode(WIO_5S_DOWM, INPUT_PULLUP); pinMode(WIO_5S_LEFT, INPUT_PULLUP); pinMode(WIO_5S_RIGHT, INPUT_PULLUP); pinMode(WIO_5S_PRESS, INPUT_PULLUP); } void loop() { if (digitalRead(WIO_5S_UP) == LOW) { mySender.send(NEC,0x001C630CF, 0);//NEC TV sound Up Serial.println("send"); tft.fillScreen(TFT_BLACK); tft.drawString("Sound UP",5,100); delay(1000); } else if (digitalRead(WIO_5S_DOWM) == LOW) { mySender.send(NEC,0x001C6B04F, 0);//NEC TV sound Down Serial.println("send"); tft.fillScreen(TFT_BLACK); tft.drawString("Sound Down",5,100); delay(1000); }else if (digitalRead(WIO_5S_LEFT) == LOW) { }else if (digitalRead(WIO_5S_RIGHT) == LOW) { }else if (digitalRead(WIO_5S_PRESS) == LOW) { mySender.send(NEC,0x001C6F00F, 0);//NEC TV power Serial.println("send"); tft.fillScreen(TFT_BLACK); tft.drawString("POWER",20,100); delay(1000); } tft.fillScreen(TFT_BLACK); } |
おわりに
勉強しながらWio Terminalを堪能したいと思います!
まだまだ一部の機能しかつこてないので
以下のサイトで今回の作例を紹介いただきました!
他のユーザーさんの作例もカテゴリ分けされて紹介されているので
非常に参考になります。
今後ドンドン追記され更に充実していくかと思いますので是非ご覧ください!
こんにちは、WINDOWS10のArduino IDE1.8.12でWioを9月中旬まで実行していました。
しかし、書き込み時にWioは途中で動作を停止しました。
IDEファイル—設定—追加ボードの設定が変更されていることがわかりました。
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.jsonに、置き換えました。
ただし、USBは動作しません。 COM6は1200ボーで長時間停止します。
その後何か処理をしていて。
ボードに書き込めない場合との、ERRが発生します。
ツールでは、ボードは「SeeeduinoWioTerminal」です。
シリアルポートは「COM6(Seeeduino WioTerminal)」です。
何が悪いのか教えてください。
こんにちは、自己解決しました。
みなさんはご存じなのか分かりませんが当方は初めCPUが
壊れたのかと思っていました。
結論はリセットボタンの操作方法にありました。
単純に下げて上げてを2回くりかえすだけだと思っていたのですが
かなり早く2回上下させる必要があることが分かりました。
これでまたプログラムを作ることができます。
ありがとうございました。
hisasi より