以前ラズパイを小さな画面と入力用ボタンを付けてちょっとした操作をするシステムを作るのにM5Stackが登場してこりゃいいと思っていた。ハード工作をやったことがないので、自分でケースを作る労力を考えたら5千円程で買えるのは大変ありがたい。
そう思ってM5StackBasicを買っていたんだが、内蔵バッテリーが余計なのとボタンの数が少ないのがちょっとネックでもあった。そしたらいつの間にかwio terminalが登場してた。
ジョイスティック型ボタンとは別に3つもボタンがあってバッテリーも内蔵していない。おまけに値段が3千円くらい。まさに理想的なマイコンだった。
WiFi/Bluetoothもあるんだけど、Linuxが動かせないマイコンなので簡単には利用できず、とりあえず急ぎなのでUSB接続してシステムを組んだ。
驚くことにXサーバも動かせ(てラズパイのモニタとして使え)るようだし、WiFi/Bluetoothも試したいなと思っていたんだが、つい最近まで安かった秋月でも値段が上がってた。ショック。
手元にもう無いんだけど、またいつか半導体不足が解消されたらと思うと買えないんで、またいつか使う時に忘れないようにこれまで作業したのをメモっておく。
作業にはUbuntuなPCを使用。ソフトウェア開発用にArduino IDEを使うんだけど、snap版で問題なかった。
$ sudo snap install arduino
USB接続は/dev/ttyACM0を指定。最新のラズパイOSも同じだった。
ソースは~/snap/arduino/current/Arduino以下に作成される。
以下、Linux側はrubyでwio terminalのBボタン押しながらスティック押下でLinuxシャットダウンを発行するプログラム。
※一部のコピペなんでミスあるかも。
そう思ってM5StackBasicを買っていたんだが、内蔵バッテリーが余計なのとボタンの数が少ないのがちょっとネックでもあった。そしたらいつの間にかwio terminalが登場してた。
ジョイスティック型ボタンとは別に3つもボタンがあってバッテリーも内蔵していない。おまけに値段が3千円くらい。まさに理想的なマイコンだった。
WiFi/Bluetoothもあるんだけど、Linuxが動かせないマイコンなので簡単には利用できず、とりあえず急ぎなのでUSB接続してシステムを組んだ。
驚くことにXサーバも動かせ(てラズパイのモニタとして使え)るようだし、WiFi/Bluetoothも試したいなと思っていたんだが、つい最近まで安かった秋月でも値段が上がってた。ショック。
手元にもう無いんだけど、またいつか半導体不足が解消されたらと思うと買えないんで、またいつか使う時に忘れないようにこれまで作業したのをメモっておく。
作業にはUbuntuなPCを使用。ソフトウェア開発用にArduino IDEを使うんだけど、snap版で問題なかった。
$ sudo snap install arduino
USB接続は/dev/ttyACM0を指定。最新のラズパイOSも同じだった。
ソースは~/snap/arduino/current/Arduino以下に作成される。
以下、Linux側はrubyでwio terminalのBボタン押しながらスティック押下でLinuxシャットダウンを発行するプログラム。
※一部のコピペなんでミスあるかも。
=== sample.rb #!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'serialport' # 9600bps, 8bit, ストップビット1, パリティ無し #sp = SerialPort.new('/dev/ttyACM0', 9600) Thread.new do sp = SerialPort.new('/dev/ttyACM0', 115200, 8, 1, SerialPort::NONE) sleep 3 sp.puts "START" loop do s = sp.gets.chop # wio通信データ取得(改行は取り除く) ##s = sp.readline # 改行コード毎に読み込み case s # シャットダウン when "sd" #system "sudo poweroff" end end sp.close end loop do end === sample.ino #include"TFT_eSPI.h" #include"Free_Fonts.h" //include the header file TFT_eSPI tft; void setup() { tft.begin(); tft.setRotation(1); // up side down display 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_DOWN, INPUT_PULLUP); pinMode(WIO_5S_LEFT, INPUT_PULLUP); pinMode(WIO_5S_RIGHT, INPUT_PULLUP); pinMode(WIO_5S_PRESS, INPUT_PULLUP); //pinMode(BUZZER_PIN, OUTPUT); tft.fillScreen(TFT_BLACK); tft.drawString("Power On",10,10); } void loop() { // ------------------ Input Data ---------------------- if(Serial.available()>0){ String s = Serial.readString(); if(s =="a\n") { //tft.fillScreen(TFT_BLACK); tft.drawString("get A",80,100); } else { //tft.fillScreen(TFT_BLACK); tft.drawString(s,80,100); } } // ------------------ Button ---------------------- if (digitalRead(WIO_KEY_B) == LOW){ // function if (digitalRead(WIO_5S_PRESS) == LOW) { //=== Shutdown Serial.print("sd\n"); tft.fillScreen(TFT_BLACK); tft.drawString("shutdown!!",10,10); delay(500); } } }
※コメント投稿者のブログIDはブログ作成者のみに通知されます