M5StickのProto HATとProto Unitをためす

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

M5StickCに外付け回路を接続するときに便利になProto系HATとUnitをためしてみました。

外見

左からProto HATMini Proto UnitProto Unitです。一番右側のProto Unitだけスイッチサイエンスさんで取り扱いがあります。

Unitはちょっと名前がややこしくて、本当は右側がMini Proto Unitで真ん中がNew Mini Proto Unitです!

これ以外にM5StickC Proto Plus Hatって製品もありますが、ケースにはいっていないので、自分でユニバーサル基板をカットして作るのとそう変わらないので購入していません。

内容物

こんな感じで、Proto UnitはM5StickCと同じ大きさで、厚みが薄いです。レゴ穴が空いていますが、M5StickCのネジ穴とは位置がずれているので固定には利用できません。

Mini Proto UnitはProto HATよりちょっと大きいのかな?

接続例

つなげたところです。Unitにはケーブルが1本ついてきます。他の長さのケーブルもあるので、2mから10cmまで別売りを購入することができます。

それより短いのは無いので自作する必要がありそうですね。

M5StickCの表から見た感じはこんなです。箱には入っていますが、蓋はないのでオープンになっています。

オフィシャル以外のProto HAT

PinHeader HAT

手前にも信号が出てきて、HATの連結もできる商品です。かなり便利そうですね。

M5StickC Proto Module

作例のみですが、3Dプリンタで自作したレポートです。

まとめ

ためすというタイトルですが、まったくためしていません!

紹介のみですが、きれいにケースにいれるのためにProto系を使ってみるのはどうでしょうか?

私のブログはこんなこともできますって紹介なので、あまり見た目にはこだわっていません。

上記はSDカードリーダー接続時の写真ですが、びよーんと伸びています。

上記はn602さんの作例です。きれいですね!

でもここまできれいに作って紹介してしまうと、自分には敷居が高いって思う人いますよね?

というか、3Dプリンタもっていないので作れないだけなんですけれどね。。。

構成部品としてのアウトプットなので、実用化できそうだなって思ったところでブログに書いてありますので、そのまますんなり実用化できないものもありますが、組み合わせてすり合わせれば、すぐにプロトタイプが作れるかなーってところぐらいまでの情報は書いているつもりです。

M5StickCのPIR HATをためす

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

赤外線センサーのPIR HATを使ってみました。細かい設定は一切できませんが、かんたんに利用できるセンサーでした。

販売元

スイッチサイエンスでも税込286円とかなり安いです。

HATではなく、Grove接続のユニットも販売されています。こちらは税込440円です。

外見

かなり昔にかったので、まだ大きいパッケージです。最近だと小さくなっている可能性もあります。

内容物はPIRセンサーと固定用の両面テープです。

接続した状態です。

スケッチ

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.println("PIR TEST");

  pinMode(GPIO_NUM_10, OUTPUT);
  pinMode(36,INPUT_PULLUP);
}

void loop() {
  M5.Lcd.setCursor(60, 20, 4);
  int pir = digitalRead(36);
  M5.Lcd.println(pir);
  digitalWrite(GPIO_NUM_10, !pir);
}

スケッチ例ほぼそのままで、赤色LEDも点灯するようにしてあります。

赤外線センサーの値が変わったらONになるセンサーです。基本的には人体などの発している赤外線をキャッチしているようですが、扉などの開閉でも環境によっては赤外線の状況が変化するので反応しそうです。

真っ暗な、なにもない部屋の中とかだと難しいかな?

まとめ

HATなので向きが固定になりますが、非常に安いセンサーです。ユニット版も比較的安いので採用しやすいセンサーだと思います。

ただ、感度や範囲は一切調整できないので気をつけてください。

M5Stack商品一覧(2020/01/15)

概要

オフィシャルサイトの商品を一覧にしてみました。サンプルスケッチとデータシートどこだーってときにつかってください。

ただスケッチのURLは結構変更されていたりして、404がありますがちょっと名前変わっているだけなので、もう少し上位のURLを見てあげれば発見できたりします。

この表はオフィシャルサイトの情報そのままなので、リンクなどの修正をしていません。

上記ページはHATとUnitだけですが、多少手で修正してあります。

SKUで商品のカテゴリと販売順序がわかります。発売日を知りたい場合には以下のページが探しやすいです。

M5Stack商品一覧(2020/01/15)

画像商品名SKU価格PDFLink
ATOM Lite ESP32 Development KitC008$5.95[ESP32-PICO]













ATOM Matrix ESP32 Development KitC008-B$8.95[ESP32-PICO]
[MPU6886]












M5StickT ESP32 Thermal Camera Development Kit (Lepton 3.0)K016-T$429.00[ESP32-PICO]
[MPU6886]
[AXP192]
[SPM1423]
[Lepton datasheet]
[Lepton enigneering datasheet]
[Lepton software interface description]
[M5StickT Factory Test]







M5Stack NB-IoT Plus Module (M5311-GB)M030$13.95[M5311]
[M5311 AT Command]
[NB-IoT Plus Module]



[here]







BaseXK037$25.90





[here]







M5Stack Canvas Bag3.AC.009.0017$1.50













M5Stack T-shirt$6.50













UnitV AI CameraU078$17.95[K210]













M5StickC PowerCU081$8.50













M5StickC 18650CU080$7.95













M5 Faces II Bottom BoardA075$8.95













M5 Faces Bottom BoardA009$7.95













JoyC (W/O M5StickC)U079$14.95





[Arduino]







RoverC(W/O M5StickC)K036$44.50





[here]







LoRa Module( 868MHz )M029$13.50[LoRaWAN Regional Parameters]





[here]







M5StickC CardKB HATU077$4.59





[CardKB HAT Firmware]
[here]






SG90 ServoA076$3.50













BugC (W/O M5StickC)K033$9.95





[here]







M5StickC 8Servos HATU076$5.25





[here]







PuppyC (W/O M5StickC)K035$18.95





[here]







LoRaWan Module(RHF76-052)M018$14.50[LoRaWAN User Manual]
[AT command for LoRaWAN]
[LoRaWAN Regional Parameters]
[LoRaWAN User Manual]


[here]







M5StickC SERVO HATU075$9.95





[Arduino]







M5StickC Fingerprint HAT(F1020SC)U074$19.95













M5StickC Joystick HATU073$3.95





[Arduino]







M5StickC ToF HAT(VL53L0X)U072$7.25





[Arduino]







M5StickC NeoFlash HatU071$14.95





[Arduino]







13.56MHz RFID Card-F08 Chip (5pcs)A073$2.00













M5StickC Yun Hat(SH20/BMP280/SK6812)U070$8.95[SHT20]
[BMP280]




[Arduino]







M5StickC Proto Plus HatU060-B$1.95





[here]







BeetleC (W/O M5StickC)K030$11.95





[here]







IIoT Dual-Switch Kit with coreA072$32.50













Development Board Watch Kit (Excluding Core)K009-F$9.95













M5 AC SocketK031$12.50













M5Stack RS485TA071$2.25













Butterfly LauncherA041-B$19.95













Glass Panel Repair KitA070$1.80













M5SCALE DIY KITK029$29.95





[here]







M5Stack 6060-PUSHK028$29.90













M5Stack Battery Base for camerasA068$2.95













M5Stack NB-IoT Module (M5311)M028$17.95[M5311 AT Command]
[M5311]
[TXS0104E]
[NB-IoT Module]


[here]







M5Stack LTE Module (M8321)M027$45.40













M5Stack GSM Module (M6315)M026$10.25













DHL Fast Shipping Freight Replenishment Link$13.99













M5StickC RS485 HAT AOZ1282CIU067$3.25





[here]







M5StickC DAC HAT MCP4725U068$3.50





[here]







M5StickC ADC HAT ADS1100U069$3.50[ADS1100]





[here]







Laser Rx UnitU065$3.75





[here]







Laser Tx UnitU066$1.90





[here]







New Mini Proto Unit 40 HolesU064$1.25













M5StickV K210 AI Camera (Without Wifi)K027$26.50













M5StickC Thermal Camera Hat(MLX90640)U062$87.95[MLX90640 Datasheet]





[Arduino]







M5StickC Proto HatU060$1.59













M5StickC NCIR Hat(MLX90614)U061$8.95[MLX90614 Datasheet]





[Arduino]







Mini Fan UnitU063$2.95





[here]







Vibration Motor Unit (N20)U059$2.95





[here]







Finger Print FPC 1020A Panel for M5 FacesA066$17.50













RFID RC522 Panel for M5 FacesA067$7.95[MFRC522]













180° Infrared Refletive Unit (ITR9606)U058$1.59





[here]







90° Infrared Refletive Unit (ITR9606)U057$1.59





[here]







3-Axis Digital Accelerometer Unit (ADXL345)U056$2.50[ADXL345]





[here]







M5StickC+ Development Kit with HatK016-F$15.90













Fish-eye Camera Module (OV2640)U037$16.95[ESP32]
[OV2640]




[Serial communication-M5CameraF]
[Serial communication-M5Core]
[QRcode]
[MPU6050]




2x15 Pin Headers Socket 2.54mm Male & Female 4 Pair ConnectorA001$7.95













M5StickC PIR Hat (AS312)U054$2.00





[Arduino]







M5StickC Speaker Hat (PAM8303)U055$2.50[Schematic]





[Arduino]







Base15 Proto Industrial Board ModuleK025$6.90[Schematic]





[lick here for open source architecture design files]







Base26 Proto Industrial Board ModuleK026$7.90[Schematic]





[lick here for open source architecture design files]







M5StickC ENV Hat (DHT12/ BMP280/ BMM150)U053$5.95





[BMP280 library]
[Arduino]






30° Plastic Corner Connector for 1515 Aluminum ProfileA053$3.99













45° Plastic Corner Connector for 1515 Aluminum ProfileA054$3.99













Plane I Plastic Corner Connector for 1515 Aluminum ProfileA059$3.99













6 Sides Plastic Corner Connector for 1515 Aluminum ProfileA056$3.39













5 Sides Plastic Corner Connector for 1515 Aluminum ProfileA057$3.39













4 Sides Plastic Corner Connector for 1515 Aluminum ProfileA058$3.39













Plane T Plastic Corner Connector for 1515 Aluminum ProfileA060$3.99













Plane L Plastic Corner Connector for 1515 Aluminum ProfileA052$3.99













Any Angle Plastic Corner Connector for 1515 Aluminum ProfileA055$3.99













M5:Bit converter Board for Micro:bitA051$4.95













Universal IOT Experiment Kit for ESP32K024$129.95[ADS1115]
[DAC6574]
[TPS54360]
[RC522]
[MAX4466]
[SP485EEN-L/TR]
[BMP280]
[M5IoT-kit]
[Joystick]
[DHT12+BMP280]
[Light]
[Relay]
[Microphone]
[Servo]
[DC-Motor]
[RFID]
PM2.5 Air Quality Kit (PMSA003 + SHT20)K023$48.95[PM2.5]
[SHT20]
[PMSA003]



[Arduino]







1515 Cutting Aluminum Profile 100/200/500/1000mm Used In Assembling DeviceA061$2.99













Customized M5STACK logo Adhesive tape BUY 5 GET 6AC0560006$1.90













GOPLUS Motor driver Module with MEGA328PM025$9.95





[here]
[GoPlus]
[GoPlus]





8 PCS M3*12/18/25/32 Screw With Allen KeyA050$2.99













IO Unit Kit ( I/O Proto Relay 3.96 RS485 DAC ADC)U051$15.50













HMI Unit Kit (Joystick/ Dual-Button/ Button/ CardKB Mini Keyboard)U052$11.50













Environment Unit Kit (Earth Angle PIR HUB Light RGB IR ENV)U050$16.95













I/O Hub 1 to 6 Expansion Unit (MEGA328)U041$4.95





[PbHUB]







Mini GPS/BDS Unit (AT6558)U032$11.95[AT6558]
[MAX2659]
[CASIC multimode satellite navigation receiver protocol specification]



[here]







USB Module with MAX3421EM020$11.39[MAX3421E]





[here]
[here]






Development Board Watch Kit (Excluding Core)K009-E$9.95













Finger Print Unit (FPC1020A)U008$16.95





[FINGER communication protocol]
[here]






Extend Serial I/O Unit (PCA9554PW)U011$2.59





[here]
[here]






Unbuckled Grove Cable 1m/2m/50cm/20cm/10cmA034$1.95













Core Development of Proto BoardA002$1.59













I2C Hub 1 to 6 Expansion Unit (TCA9548A)U040$3.95[TCA9548A]













ESP32 Basic Core IoT Development KitK001$27.95[ESP32]
[IP5306]
[Schematic]
[here]
[here]









M5Stack FIRE IoT Development Kit (PSRAM 2.0)K007$49.95[ESP32]
[IP5306]
[schematic]
[here]
[here]









ESP32 GREY Development Kit with 9Axis SensorK002$33.95[ESP32]
[IP5306]
[schematic]
[here]
[here]









ENV Unit with Temperature Humidity Pressure Sensor (DHT12+BMP280)U001$4.95





[here]
[here]






DAC I2C Unit (MCP4725)U012$3.95





[here]







ADC I2C Unit (ADS1100)U013$3.95





[here]
[here]






ISP USBasp Programmer (Random Color)A049$3.99













FLIR Lepton 3.0 BaseK021$598.95[Lepton 3&3.5]
[Lepton Engineering Datasheet]
[Lepton Software Interface Description]



[here]







Lidar Bot AGV Mini CarkitK017$399.00





[here]
[https://github.com/m5stack/M5-espnow]






NODE Audio Dev Module (WM8978/ DHT12)M017$13.95













COMMU Module Extend RS485/TTL CAN/I2C PortM011$11.39[SP3485]
[MCP2515]




[MCP_CAN_lib file]
[here]






Joystick Panel for M5 FACESA007$7.95





[JOYSTICK Firmware]
[here]






Mini RFID Unit (MFRC522)U031$9.95[MFRC522]





[here]
[here]
[UIFlow]





RGB LED Unit (SK6812)U003$1.99





[here]
[here]






Mini Dual Button UnitU025$1.99





[here]
[here]






Mini 3A Relay UnitU023$1.99





[here]
[here]






Earth Moisture UnitU019$1.99





[here]
[here]






VH3.96 - 4Pin Transfer Module UnitU020$1.59













Mini Button UnitU027$1.59





[here]
[here]






I2C Joystick Unit (MEGA328P)U024$4.95





[here]
[here]






2.54mm Mini Proto Unit 70 HolesU022$1.59













PSRAM Camera Module with ESP32 WROVER (OV2640)U017$14.95[ESP32]
[OV2640]




[https://github.com/m5stack/m5stack-cam-psram/tree/master]
[https://github.com/m5stack/m5stack-cam-psram/tree/master]
[Color recognition]
[Face recognition]
[here]



Light Unit with Photo-resistanceU021$1.99





[here]
[here]






BTC Standing Base for M5 Core with DHT12A011$4.95





[here]







PLC Proto Industrial Board ModuleK011-B$9.95













LAN Module with W5500K012-B$13.95[W5500]













Encoder Panel For FACES Kit (SK6812)A006$7.95





[ENCODER Firmware]
[here]






Stepmotor Module with MEGA328P (DRV8825)+FAN Module for Stepmotor+12V Power AdapterM012$16.39





[STEPMOTOR Firmware]
[here]
[UIFlow]
[here]




Battery Module for ESP32 Core Development KitM002$7.95













Proto Module with Extension & Bus SocketM001$2.95













LoRa Module (433MHz)M005$9.95





[here]







GPS Module with Internal & External Antenna (NEO-M8N)M003$26.39[NEO-M8N]
[u-blox Protocol Manual]
[u-blox 8 / u-blox M8 Receiver Description - Manual]



[here]







M5 Faces Pocket Computer with Keyboard/Game/CalculatorK005$55.59[ESP32]
[MPU6886]
[IP5306]
[M5Core Schematic]
[here]
[here]
[Example]
[Panel Firmware]
[Github]





GSM Module SIM800L with MIC & Headphone JackM004$9.95













M5Stack Commemorative Edition T-Shirt$5.00













BALA ESP32 Development Mini Self-balancing CarK014-B$77.59





[M5Bala]







Connector Grove to GROVE/PIN/SERVO (5pcs)A039$1.95













Slide Nut for 1515 Aluminum Profile (10pcs)A037$2.50













Plastic Corner Connector for 1515 Aluminum Profile (10pcs)A036$5.99













FRAME Panel Extended Install Components (2 Sets)A013$3.39













USB-TTL UART Serial Adapter (CP2104)A012$2.95













Experimental Proto Board Set include DHT12 Bus SocketK008$3.39













NeoFlash Acrylic Light BoardA042$27.95





[FastLED Library]
[here]






Mini Weight Unit (HX711)U030$3.39[HX711]





[here]
[here]






Time-of-Flight Ranging Unit (VL53L0X)U010$6.50





[here]
[here]






NCIR Temperature Sensor Unit (MLX90614)U028$9.95





[here]
[here]






Color Sensor RGB Unit (TCS3472)U009$4.95[TCS3472]





[here]







Mini Infrared Distance UnitU002$1.99





[here]
[here]






Mini Angle Unit with PotentiometerU005$1.99





[here]
[here]






PIR Motion Sensor (AS312)U004$3.39





[here]
[here]






1 to 3 HUB UnitU006$1.59













M5GO IoT Starter KitK006$65.59[ESP32]
[MPU6886]
[IP5306]
[schematic]
[here]
[here]








PSRAM Camera Module (OV2640)U038$13.39[ESP32]
[OV2640]




[Face recognition]
[Serial communication-M5CameraX]
[Serial communication-M5Core]
[QRcode]
[MPU6050]
[here]


RS485 to TTL UnitU034$2.59













CardKB Mini Keyboard Unit (MEGA328P)U035$4.59





[CardKB Firmware]
[here]
[here]





HEX RGB LED Board (SK6812)A045$3.95





[FastLED Library]
[here]
[here]





SK6812 RGB LED Flex-stripA035$3.39





[FastLED Library]
[here]
[here]





16-Key Capacitive Touch Unit (MEGA328P)U026$4.95





[Maykey Firmware]
[here]
[here]
[example]




Thermal Camera Unit (MLX90640)U016$85.25[MLX90640]





[here]







ESP32 Camera Module Development Board (OV2640)U007$8.39[ESP32]
[OV2640]




[https://github.com/m5stack/m5stack-cam-psram/tree/NoPsram]
[here]






Grove-T Connector (5pcs)U039-B$4.95













BUS ModuleM024$3.95













Battery Bottom 150mAh for M5StackC001-C$6.59













4 Channels DC Encoder Motor driver moduleM021$11.39





[LEGO+ Firmware]
[LEGO+ Firmware]






M5GO/FIRE Battery Bottom Charging BaseA014$9.95













SERVO Module Board 12 ChannelsM014$9.95





[SERVO Firmware]
[here]
[UIFlow]
[here]




PLUS Module Encoder Module with MEGA328P 500mAh BatteryM019$9.95





[PLUS Firmware]
[here]






LEGO Motor Adapter CableA030-B$1.95













Rubber Band Powered Butterfly LauncherA041$10.59





[example]







Cat Ears Acrylic HeadbandsA043$29.95





[FastLED Library]
[here]






Mini Development Kit ESP32 1.3'OLEDK016-B$14.95[ESP32]
[IP5306]
[here]



[Schematics]
[M5Stick factory test software]
[M5Stick watch]
[White Cube Game]




Acrylic Piano Board with RGB LEDA047$13.95





[https://github.com/m5stack/M5-ProductExampleCodes/blob/master/App/PIANO/Arduino/M5PIANO/M5PIANO.ino]







Trace Unit (For Lidar Bot/Bala)A048$8.39





[TRACE Firmeare]
[here]
[here]





M5GO Watch Strap Nylon Soft Replacement StrapA033$2.95













Mini Heart Rate Unit (MAX30100)U029$6.59[MAX30100]





[MAX30100 lib]
[here]






M5GO Lite IoT Development KitK022$49.95[ESP32]
[MPU6886]
[IP5306]
[Schematics]
[here]
[here]
[here]
[here]
[here]





Seria(セリア)でフラッシュしんごうき(110円)を買う

概要

セリアで販売していた、信号機を買ってみました。ちゃんと点灯するし、信号機の動きもするのでとっても可愛かったです。

外観

高さ13.5センチぐらいで、そこそこ大きいです。色は黒と白がありました。

裏側にボタン電池の蓋があります。

そこは4センチ四方ぐらいの空間がありますので、ここにマイコンとかの部品を埋め込めそうです。

電池はLR44が2個最初からはいっています。ボタン電池をバネで固定する場合ってプラス側にバネなんですね。

分解してみた

こんな感じで、下にマイクロスイッチが2個と、LEDが3個と8ピンのICがのっています。あとは電源用のパスコンだけで、抵抗なし?

型番わからず、、、

分離

裏側は爪に固定されています。

分離しました。

爪と爪の間に穴を下から開ければ配線が通りそうですね。

動作モード

ボタンが2個あり、左を押すと緑から緑点灯、黄点灯、赤と順に2度ループして電源が切れます。右を押すと緑、黄、赤を順にピカピカ光るループが何度が動きます。

ずーっと信号になるモードはありませんので、改造したくなりますよね。。。

販売場所

セリアのおもちゃコーナーにありました。しかし3店舗みましたが、1店舗でしか扱っていませんでした。去年末ぐらいから出回っているみたいですが、安定して在庫があるかはわからないです。

類似品

Twitterで教えてもらいましたが、AliExpressに売っていました。ただセリアのは音はならないので、カスタマイズしたものだと思います。

んー、やっぱり日本で売るんだったらコストダウンもありますが、音無の方がいいですね。1ピン使っていない端子があるので、もしかしたらそこに音データは出てきているのかもしれません、、、

まとめ

そのままでもかわいいオブジェです。改造もしやすそうなので何個か持っていてもいいんじゃないでしょうか?

多読によるプログラミング言語勉強法

概要

プログラムも言語なので、文系科目です。多読によるプログラミング勉強法を紹介したいと思います。

言語の勉強方法

言語を勉強する場合には主に二種類のアプローチがあります。

文法からのアプローチ

英語などを外国語として学ぶ場合には、一般的に文法からしっかり学びます。一般的にある程度の年齢以上になると、文法から勉強したほうが勉強効率は高くなるようです。(すみません、根拠あるはずですが、手元資料はありません)

高頻度接触でのアプローチ

英語を母国語として学ぶ子供はこちらのアプローチです。しかしながら社会人になると、まとまった時間が取りにくいので、このアプローチはなかなか取りにくいです。

プログラミング言語は文系か理系か?

私は文系だと思います。そもそも文系と理系という区分が適していないと思っています。一般的に数学ができる人が理系で、苦手な人が文系とされている気がします、、、

プログラミングは課題の言語化であり、その人の主張を文字化する行為でもあるので文系だと思っています。

プログラミングは法律と同じようなものであり、書いた通りに運用されます。脱税との戦いのように、文が曖昧だと運用も曖昧になってしまいます。

写実的か抽象的か?

理系か文系かよりも、こちらの軸の方が重要だと思います。どちらかというとデザイナーとプログラマの指向性に近いです。絵を描く場合にうまいか下手かを別にして、細かい模様があるものを、なるべく見たままのものを描こうとする人が写実的で、なんとなく雰囲気がわかるようなものを描く人が抽象的です。

ピカソなどは子供の頃はデッサンしっかり学んでいるので、写実的にも描けますが、どんどん抽象度が上がってきています。逆に下手ウマで売っている蛭子能収さんなんかは写実的に描こうとしたら、元の絵が描けなくなりそうです。

一般的にプログラムに適している人は写実的な人になります。ただ作品を作るためにプログラムが必要な人ってのは抽象的な人が多い気がします。

自分がどれぐらいの位置にいて、今後どうなっていきたいかを考えながら勉強するのも良いことだと思います。

多読勉強法

「13歳のハローワーク」的な本を、それぐらいの年齢によみ、なんとなくプログラマになろうと思い、勉強をはじめました。ただ「13歳のハローワーク」だとプログラマってどうかいてあるんだろう?

上記に公開してありました。当時は別の本でしたが、とりあえずプログラム言語の勉強をはじめました。

当時の勉強法は図書館で関係ありそうな本を、とにかく大量に読む多読。中学生で時間があったので、かなりの量を読むことができました。

もちろん、一冊すべてを理解することはできないのですが、何冊も読んでいるうちになんとなくわかってきます。学生であれば三桁ぐらいの本も読むことができると思います。

ただし、図書館って地域差がかなりあるんですよね。人口に比例して予算があるので、人口が多い場所に住んでいるってのはものすごい利点だと思います。

とはいえ、いろいろな図書館で蔵書検索してみましたが、「C言語」で検索できる本って場所によってかなりの差がありました。

あと東京は区単位で図書館が整備されているので、実は横浜市とか大阪市のほうが図書館の規模は大きいです。

どのプログラミング言語を学ぶ?

個人的には色々手を出してほしいですが、かんたんに言語系統別の解説をします。こちらも語学と一緒なので、似たような言語はすぐに使えます。フランス語を使える人がすぐに英語を覚えることができるように、言語には関連性があります。

BASIC(BASIC, FORTRAN)

昔の入門向け定番言語でした。プログラムの歴史的経緯を知るのにはいいですが、最近はちょっと利用される機会が減ってきているようです。

試しにプログラムしてみるのにはいいですが、文法の勉強には向かない言語だと思います。

COBOL

こちらも昔の商業高校などでの必修言語でしたが、現在はあまり使われていませんので、新規で勉強をするのはおすすめしません。

C(C, C++, GO, Java)

今も昔もよく使われている言語たちです。C言語はヨーロッパの言語でいうとラテン語に近いもので、C言語をベースによりよくしていった言語たちがたくさんあります。

ヨーロッパ系の言語はラテン語の影響を受けた言語が多いので、比較的似ています。ここの群にいる言語から学習を始めると、他の言語も学習しやすいです。

Python

C言語系の言語体系だと表現が冗長になる構文を、より書きやすくした言語です。エスペラントみたい? ちょっと違うか。。。

他の言語とはまるで違う言語体系なので、なれてしまえば便利ですがC言語周辺とは考え方もかなり違います。ヨーロッパ系の人が、日本語を学ぶようなイメージかな?

同じような言語としてRubyがあります。こちらも同じようなコンセプトの言語です。

学習の順番

使いたいターゲットとなる言語がない場合にはC言語をおすすめします。一番勢力的には大きく、ベーシックな言語です。

C言語をなるべくがっつり勉強して、ポインタ周りを理解しましょう。たぶん本をちょっと読んだぐらいだと理解できないので、多読が必要になると思います。複数の本を読むとなんとなく理解が深まります。

C言語を少し勉強したあとに、おすすめなのが上記の「一夜漬けCASL」です。かなり古い本ですが、CASLというアセンブリ言語の本です。C言語の深いところを理解するのにはアセンブリの知識もあったほうがいいです。この本はかなり難しいアセンブリ言語をなんとなくわかった気にさせてくれる名書です!

その後はJavaがおすすめです。このへんは歴史が長いので良書が多いです。もちろんだめな本もたくさんあったり、嘘が書いてある本もあります。そーいう意味でも多読をすることで、検証しながら読むことも身につけることができると思います。

実習は必要?

私は一年以上本だけの独学で勉強をしましたので、必須ではないとは思います。ただ、実際にプログラムを組みながら勉強したほうが効率的な人もいるとは思います。

まだ若くて時間がある人であれば、まずは本だけで勉強するのでも十分だと思います。実際にプログラムを組んでみると、どうしても何を組むのかが主体になって、文法の勉強がおろそかになってしまう危険があります。

ある程度の年齢になっていている場合には、実際に組みながら必要になったところを勉強する方が効率がいいと思います。

コードの多読は必要?

これは難しいところで、一般的な英語学習とかであれば英語の絵本を多読する勉強方法がありますが、プログラムの場合におすすめのコードは少ないです。

オープンソースが広まったので、自由に読めるコードは多いのですが、思ったより汚いソースコードが多いのと、高度すぎるコードなどで程よい難易度のものが少ないです。

書籍などのサンプルコードをたくさん読むほうが適している気がします。

ある程度勉強が進んでいる状態であれば、ウイザード級の人のソースコードは非常に参考になります。ただウイザード級の人が本当に一人だけで組んでいるソースコードってのが少なく、一般公開されているコードはチームで組んでいることが多いです。

本当に実力をつけるには?

実力のある人に添削してもらうのが一番だと思います。とはいえ、添削って非常に難しいです。英語の添削でもちゃんとできる人はまれです。違和感がある場所などについて、なぜその書き方だといけないのかをちゃんと説明してあげる必要があります。

文法的には正しいけれど、保守性やバグを少なくする方法まで考えて添削をするとなると、それなりに経験を積んだ人じゃないと添削できないと思います。

実装系の勉強方法

言語の学習は本がありますが、実際の実装系もしておいたほうが好ましいです。コンパイラとかリンカとかメイクとかです。

上記はかなり古いですが、Windows(DOS)の体験版のC言語環境です。非常にマニュアルが整備されているので一通り目を通すとかなり勉強になります。

上記が100行まで使えるアセンブラですので、LSI C試食版と組み合わせてC言語からアセンブラで書いた関数を呼び出すなどができます。

最近はgccを使うことが多いのでgccの書籍を勉強してみるのもおすすめです!

ただしgccは非常に巨大なシステムなので、勉強する範囲が広すぎる気もします。LSI Cのマニュアルも284ページあります、、、

まとめ

社会人には多少難しいかもしれませんが、多読での勉強はおすすめです!

作ってみようみたいな本ではなく、文法入門書を大量に読むほうがおすすめです。

1万円以下で作る、ぼくのかんがえたさいきょうの小学生向けプログラミング教育環境

概要

なんとなく考えていたことをまとめてみました。小学生、もしくは中学生向けに数十人を対象としたスクール形式でのプログラミング教育で使う場合の環境です。

モニタ以外は全部用意して学校の備品はモニタしか使いません。家に持ち帰ればテレビにHDMI接続することで利用できる環境です。

予算としては、一人あたり一万円以下で構築することを目標として設定しています。

また、無線LANは大人数で使うと安定しないことがあるので、ある程度スタンドアロンで動く環境になっています。

環境の一覧

購入場所機材金額
AliExpressOrange Pi PC2 SET53,767
AliExpressM5StickC1,851
AliExpressPIR HAT222
AliExpressSpeaker HAT278
AliExpressBAG167
Amazon.co.jpキーボード880
Amazon.co.jpマウス379
Amazon.co.jpSDカード590
Amazon.co.jpHDMIケーブル298
合計8,432

金額は送料込みのものです。一括して購入すればもうすこし安くなるかもしれませんが、単体で購入した場合の金額となります。

また、為替の影響で金額はかわりますのでご注意ください。これ原価なので、実際は故障したり壊したりした場合に交換用も確保しておく必要があるので、一万円ぐらいかな?

機材説明

Orange Pi PC2 SET5(3,767円) ※送料500円前後含む

Raspberry PiみたいなシンボルボードPCです。予算があるのならRaspberry Piを購入したほうが楽だと思います。ただRaspberry Piだけでケースと電源とか必要なものを購入すると一万円超えてしまいます。

Orange Piのセットはケースと電源アダプタのセットになります。ただしたまに在庫切れをおこして購入ができない場合があります。この記事を書こうと準備していて、確認したら在庫切れ、、、

なので、まだ実際には使ったことがありません。スペック的には動くような気がしますが、在庫が復活したら購入してチャレンジしてみたいと思います。

有線LANはありますが、無線機能はありませんのでご注意ください。無線機能付きのボードは逆に日本で使えないのです、、、

M5StickC(1,851円)※送料500円前後含む

バッテリー内蔵のマイコンです。小学生向けプログラミング教育だとScratchがメインだと思いますが、同じようにブロックを使ったプログラミングができます。

パソコン上でだけ動かすだけより、実際にものを作って動かすことも体験してもらいたいです。腕時計型のバンドも付属しているので、身につけて動かすこともできます。

小さい液晶画面に文字や絵を表示することもできますし、LEDを光らせたり、赤外線リモコンとして利用したり、ボタンも内蔵しています。

後記するHATなどを使って、かんたんに機能を拡張することもできます。

PIR HAT(222円)

PIRは赤外線を利用した、動き検出センサーです。人が近づくと光るライトなどに使われているセンサーです。

本当はM5StickCと温度・湿度計などのセットがあったのですが、こちらも現在在庫がありませんでしたので、センサーを選び直しました。

実際のところ、大人は温度とか気圧計をたのしいと思うのですが、小学生だともう少しリアルタイムに計測するセンサーの方がいいよね?

Speaker HAT(278円)

M5StickCにはマイクは内蔵しているのですが、スピーカーは内蔵していません。外付けスピーカーを追加することで、音を出すことができます。

BAG(167円)

テンキー付きのキーボードがちょっとはみ出るぐらいのかばんです。必須じゃないですが、この値段であれば一式を入れておく袋って便利だと思います。

機材を貸し出したり、買い取ってもらって、家に持ち帰るときにきれいに収納できるのって重要だと思います。

キーボード(880円)・マウス(379円)

USB接続であればなんでもいいと思います。Amazonで購入していますが、2,000円以上じゃないと購入できない商品なので、まとめて購入するかヨドバシなどで探してもいいと思います。

SDカード

こちらも16Gぐらいのものであれば動くと思います。最初に環境を作ってからそれをコピーして配布するような形で考えています。

セットアップには別途パソコンと、SDカードリーダー(100円ショップ等)が必要になります。

HDMIケーブル

モニタやテレビに接続するためのケーブルです。こちらも長さがいろいろあるので、適当な長さのものを購入すればよいと思います。ダイソーで300円でも販売しています。

環境解説

OS(Armbian)

無料で利用することができるOSです。Linuxベースですがプログラミング教育であれば違和感なく利用することができると思います。

Scratch

定番のグラフィカルプログラミングツールですね。一応これも入れておいて最初はこっちだけでもいいのかもしれません。

Scratchであれば教材もたくさんありますしね!

UIFlow-Desktop-IDE

Scratchみたいなブロック型のプログラミングツールで、M5StickCを動かすことができます。USBケーブルで接続してプログラムを転送します。

ブロックの他にPythonでも動かすことができるので、小学生にはちょっと早いかもしれませんが、もう少し上の年代向けにはPythonの学習にもよいと思います。

欠点として、ちょっと教材がありません。中国語や英語での解説PDFはあるので、日本語版もほしいですね。

本来はM5StickCは無線LANを内蔵しており、UIFlowもブラウザ上で実行できるのですが人数が多くなると無線LANの調子が悪くなったりするので、今回は有線での紹介となっています。

まとめ

ざざっと書き出しましたが、いかがでしょうか?

課題としてはカリキュラムですね。興味のある方がいましたら一緒に作りましょう!

お小遣いではじめるマイコン電子工作入門(2020年1月)

概要

マイコン電子工作には多少のお金がかかります。毎月数千円ぐらいで学習する場合のおすすめをまとめてみました。

一ヶ月目:Arduino入門

Arduinoと各種最低限必要そうな部品がセットになった商品です。付属メディアにマニュアルがはいっていますが、最新版をホームページからダウンロードしてきて使ってください。

Arduinoの書籍を購入して、別途部品を購入するのは非常に面倒ですが、これには日本語のマニュアルと必要な部品がすべてセットで揃っています。

無料で使える学習サイトもありますが、この値段であればあとで使える部品がたくさん入っているので、購入しておいても損はないと思います。

最低限LEDがかんたんに壊れるってのは実感したほうがいいと思います。抵抗を接続しわすれて光らすと一瞬光ってすぐに壊れます。予想しているよりあっさり壊れるので、慎重に扱わないといけないのがわかるのと、壊れてもなかなかわからないってのが実感できると思います。

マニュアルは購入前にでもダウンロードできるので、中身をみてから購入でもいいと思います。なるべく全部の項目をやったほうがいいですが、気になるのだけやれば最初はいいと思います。その後使いたい部品がでたときに、そこの部分を参考にしながら使うって使い方でも十分役に立ちます。

Arduinoという一番入門向けのマイコンを触ってみて、概要を知ることが目的になります。

二ヶ月目:ESP32入門

一ヶ月目のArduino UNOはベーシックな機能は搭載していますが、通信機能がありません。そこで通信機能があるESP32もさわることをおすすめします。

個人的には画面があって安いM5StickCばかり触っていますが、もう少し機能が充実しているM5Stackや、画面なしの安いESP32などいろいろな種類があります。

画面付きはあとの応用として興味があれば触ってみればいいと思いますので、最初は素のESP32でもいいのかもしれません。

Wi-Fi

無線といえばWi-Fi接続です。無線LANルーターに接続して、インターネットにデータを送信したり、受信したりすることができます。

ベーシックなところでは、温度計などのセンサー情報をインターネット上のAmbientなどのサービスに送信してグラフ化してみてはどうでしょうか?

一ヶ月目で購入した部品のセンサーなどを利用して触ってみるといいと思います。

Bluetooth

Wi-Fi以外の通信としてBluetoothがあります。近距離通信ですが、Wi-Fiより省電力で利用することができます。

利用しているパソコンにBluetoothが搭載されている場合にはBluetooth Serialをぜひ試してほしいです。

こちらも距離センサーなど一ヶ月目で購入したセンサーをつなげて、リアルタイムに変わるデータをパソコンに送信してみるのもいいと思います。

あとはダイソーで300円で販売している、BluetoothシャッターとESP32を接続し、シャッターのボタンをESP32で受信するなどの連携も可能です。

ESP32では、無線を使うことでどんなことができるのかを実感してほしいです。だいたいこの辺で自分がどの領域に興味があるのかがわかってくると思いますので、興味がある領域を掘り下げていくことをおすすめします。

買い物のしかた

Amazon

最初や、急に必要になった場合には便利ですが、専門店でしか購入できないものや定価より高いものがあるので気をつけて買い物をしましょう。

また、日本で利用できない機材も販売しているので注意してください。

スイッチサイエンス

無線が使えるマイコンはここで購入することをおすすめします。他の店だと日本で利用できない機材も販売していることがありますが、ここで購入できるものは基本的に問題がありません。

実店舗はなく、通販専門の会社になります。

秋月電子通商

秋葉原などに店舗がある、老舗の会社です。スイッチサイエンスでは取り扱いが少ないような、抵抗などの部品を購入するのには非常に適しています。

反面店頭販売は結構難しいので、似たようなお店の千石電商さんで購入するのもいいとおもいます。

AliExpress

中国の大手ショッピングモールサイトです。楽天みたいなサイトで非常にたくさんのお店がはいっています。かなり安いですが、届くまでに一ヶ月から二ヶ月かかるので気長にまつ必要があります。

どちらかというと、注文したのを忘れたぐらいのタイミングで届くイメージでいてください。時間がかかっても、とにかく安く購入したい場合に利用してください。

クレジットカード決済になるので、LINE PAYなどのプリペイドタイプのクレジットカードを使うと安心だと思います。

やすいので、ついついいろいろ購入してしまうので、非常に注意してください。

機材について

基本的なハサミやカッターは最初は100円ショップで十分だと思います。それ以外で必要そうなものをピックアップします。

ドライバーセット

特殊なネジに対応した精密系のセットと、ラチェット付きドライバーセットがあると便利です。最低限100円ショップでドライバーセットは購入しておきましょう。

ノギス

ちょっとしたサイズをはかる場合にノギスがあると便利です。精度を求めないのであれば、プラスチック製の方が気軽につかえます。精度が必要な場合には金属製の、デジタル表示のものがよいと思います。

私は100円ショップのものを利用しています。

ハンダゴテ

最初は必要ないかもしれませんが、一本あったほうが便利です。100円ショップにもありますが、あまりおすすめはしません。

高い日本製の方が圧倒的に使いやすいので、値段と使いやすさが比例しやすい商品です。

最初はgootのセットを利用していました。セット内容が便利だったのですが、コテ自体の性能が悪いので、千円ちょっとのもう少しいいやつを単品で購入しました。

テスター

値段でかなり性能が違いますが、はっきりいって最初は一番安いものでいいと思います。ハンダセットにテスター付きのもあるので、一緒にかってもいいかもしれません。

あまり出番はないですが、導通しているかや、電源の確認で使います。準備がない場合には、Arduino UNOなどのアナログ入力などで5Vまでであれば測定することもできます。

ちょっといいやつも持っていますが、数百円で購入したものでも十分な用途が多いです。

ニッパーなど

100円ショップでニッパーとラジオペンチなどは購入しておいてもいいと思います。高いものは切れ味が良かったり、精度がよかったりしますが、雑に金属を切ると刃がかけるので安いものもあったほうがいいと思います。

その他の機材

必要になってから購入でよいと思います。オシロスコープやロジックアナライザも持っていますが、実際のところ使う機会はほとんどありません。

オシロスコープは最低でも20MHz以上の帯域で、ロジックアナライザは100MHz以上の帯域をおすすめします。安いものを購入しても、確実に高いものに買い直す必要がでてきます。

あと買ったけれど、使わなかったものが中古市場に大量に出回っています。。。

次のステップ

ここまでで、なんとなく自分の好みがわかったはずです、、、

代表的なパターン別の次のステップを書いてみたいと思います。

ロボ系

モーターなどで何かを動かすのが楽しいと感じた場合には、メカ系を少し勉強してみてもよいと思います。

このへんは本でちょっと予習したほうがいいと思います。機構を作りたいんだったらタミヤ工作パーツが非常に便利です。

ロボット制御をしたいのであればROSやマイクロマウスあたりのキーワードで調べてみてください。

LED派

とにかく光らせたいアタナに!

LEDを単体で光らせるのはマイコンに直接接続するだけで問題ありませんが、大量に光らせたい場合にはLEDドライバーなどを利用して、外部電源に接続する必要があります。

あとは、NeoPixelなどを使うと色も含めて細かく制御することができます。

PC派

マイコンだとちょっと想像していたのと違うなって人は、もう少しパソコンに近いものを使ってみましょう。

Raspberry Piが最近良く使われているボードで、ほぼ小さいパソコンです。USB接続でWebカメラを接続したり、プリンターを接続したりとかなりいろいろなことができます。

AI派

ここまでとくに心躍ることがない場合には、AIなどの可能性もあります。最近のはカメラを利用して推定するようなものが多いと思います。

調査派

とりあえず作りたいものはないけれど、どんなものかを調べたい人!

あまりいないと思いますが、私はどちらかというと後で使えそうな技術を検証して、実際に作るときには、過去のストックを組み合わせてサクッと作るみたいなことが好きです。

雑食でどんどんいろいろなものを調査してもいいと思いますし、特定のボードを深堀りするのでもいいと思います。

M5Stack派

M5Stack社の沼にハマった人たちの一派です。

M5Stack社の新製品を楽しむ人達です。いろいろ新製品が販売するので月五千円前後で、楽しそうなのを購入して触ってみるみたいな楽しみ方です。

M5Stack社の製品の特徴として、非常にわくわくする商品が多いです。反面スピード重視で開発をしているので、調べながらじゃないと動かない面があり、そこがまた楽しいみたいです。

まとめ

マイコン電子工作の趣味は、そんなにお金かけなくても楽しむことができると思います。とはいえ、いろいろ購入しちゃうとすぐに一万円を超えてしまう趣味です。

ロボットとか作ろうとすると、モーターが一個数万円で十個以上使ったりも。。。

中国から購入すればセンサーが一個数百円ぐらいだったりするので、いろいろなセンサーを毎月触るだけでもかなり楽しいと思いますので、各自の予算に応じて楽しむことができると思います。

ほんとうはプロットを書いておいたのですが、どこかに行ったのでフリーハンドで書いて、なんかよくわからない記事になってしまいました。聞きたいことがあったらコメントかTwitterで気軽に問い合わせてみてください。

Raspberry Pi Zero WにArduino IDEを入れてESP32のコンパイルが失敗した話

概要

なんとなく昔に買ったRaspberry Pi Zero WにArduino IDEを入れてみました。UNOはコンパイルできましたがESP32は失敗しました。

Raspberry Pi Zero W

たしかM5StickCと同時にスイッチサイエンスから購入しました。セットアップだけして放置していたのですが、もう一度使ってみました。

しかし、すでにパスワードを忘れていたので起動時にSHIFTを押して起動して、再セットアップからやり直しました。

Arduino IDEのセットアップ

すでにブラウザを開いた時点で、ものすごい重いです。。。

ダウンロードはそこそこの速さでしたが、展開にものすごい時間がかかりました。展開したらinstall.shをroot権限で実行すればセットアップできました。

フォントが化けていましたので、設定から英語に変更して再起動。本当は日本語フォントを入れ直すのが正しいはずです。

Arduino UNOのコンパイル

起動直後のカラのスケッチをコンパイルしました。なんとかコンパイルできました。

ESP32のボード追加

ブラウザの検索が重いです。。。

なんとか追加して、カラのスケッチをコンパイル!

セグメントエラーがでて失敗しました。再起動してメモリを開放すれば動くかもしれませんが、実用的な速度で動かないことが確定しているので、調査はここまでです。

esptoolのセットアップ

pythonは2系と3系の両方入っていましたので、3系で入れてみました。

pip3 install esptool

入りました!

まとめ

Raspberry Pi Zero WはGUIではなく、CUIで使いましょう!

ブラウザを使うだけでもかなり重いのでデスクトップ用途では使えませんね。

M5StickCのJoystick HATをためす

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

日本未発売のJoystick HATを一ヶ月前に購入していましたが、放置していたので触ってみました。

外観

箱はいつものプラケース入りです。付属品はHAT固定用の両面テープのみ。

大きさはこれぐらいです。結構大きいかな?

ジョイスティックは金属むき出しで、頭の部分がありません。

裏側にはI2Cの情報がかかれています。I2C接続のSTM32F030F4経由でジョイスティック入力を受け取っているみたいです。

スケッチ

#include <M5StickC.h>

#include "Wire.h"

#define JOY_ADDR 0x38

// initial position of the cursor
int xPos = 40;
int yPos = 0;
int prevxPos = 40;
int prevyPos = 0;
char data[100];

int pressstate=0;
float upvelocity=0;
int platwidth=20;

// We store platform x and ys here (so there are 5 platforms here)
int plats[14]={0,0,25,0,50,0,75,0,100,0,125,0,150,0};
bool dead = true;
int deadstate=0;

int speedy=0;

int step=0;

int8_t x_data,y_data,button_data;

void setup() {
  // initialize the display
  M5.begin();
  Wire.begin(0, 26, 100000);
  // clear the background
  M5.Lcd.setRotation(2);
  M5.Lcd.fillRect(0, 0, 80, 160, BLACK);


  for(int i=0; i<14; i+=2)
  {
      plats[i+1]=(random(159)) % 159;
    
  }
}
 
void loop() {
  Wire.beginTransmission(JOY_ADDR);
  Wire.write(0x02); 
  Wire.endTransmission();
  Wire.requestFrom(JOY_ADDR, 3);
  if (Wire.available()) {
    x_data = Wire.read();
    y_data = Wire.read();
    button_data = Wire.read();
  }
  if(!dead)
  {
  for(int i=0; i<14; i+=2)
  {
//    EsploraTFT.stroke(0, 255, 0);
    M5.Lcd.drawLine(plats[i+1],plats[i],plats[i+1]+platwidth,plats[i],GREEN);
//    EsploraTFT.stroke(150, 89, 43);
    M5.Lcd.drawLine(plats[i+1],plats[i]-1,plats[i+1]+platwidth,plats[i]-1, BLACK);
    plats[i]=plats[i]+1;
    if(plats[i] > 160) 
    {
      //sets the platform to the top of screen
      plats[i]=0; 
      //sets random x position
      plats[i+1]= (random(59)) % 59;
    }
  }
  step++;
  int tilt = x_data;
  // the values are 100 when tilted to the left
  // and  -100 when tilted to the right
  // map these values to the start and end points
  speedy = map(tilt, -110, 110, 3, -3);
  xPos+=speedy;
  // don't let the point go past the screen edges
  if (xPos > 59) {
    (xPos = 0);
  }
  if (xPos < 0) {
    (xPos = 59);
  }
  if (yPos > 160) {
    (dead=true);
  }
  if (yPos < 0) {
    (yPos = 0);
  }
   // Erase previous position of player
//  EsploraTFT.stroke(150, 89, 43);
  M5.Lcd.drawPixel(prevxPos, prevyPos, BLACK);
  M5.Lcd.drawPixel(prevxPos+1, prevyPos, BLACK);
  M5.Lcd.drawPixel(prevxPos+1, prevyPos+1, BLACK);
  M5.Lcd.drawPixel(prevxPos, prevyPos+1, BLACK);
  M5.Lcd.drawPixel(prevxPos+1, prevyPos+2, BLACK);
  M5.Lcd.drawPixel(prevxPos, prevyPos+2, BLACK);
  // Create new position of player
//  EsploraTFT.stroke(0, 0, 255);
  M5.Lcd.drawPixel(xPos, yPos, 0xc48c40);
  M5.Lcd.drawPixel(xPos+1, yPos, 0xc48c40);
  M5.Lcd.drawPixel(xPos+1, yPos+1, 0xc48c40);
  M5.Lcd.drawPixel(xPos, yPos+1, 0xc48c40);
  M5.Lcd.drawPixel(xPos+1, yPos+2, 0xc48c40);
  M5.Lcd.drawPixel(xPos, yPos+2, 0xc48c40);
  prevxPos=xPos;
  prevyPos=yPos;
  upvelocity-=0.3f;
  yPos-=upvelocity;
  // Check for collisions with platforms
  for(int i=0; i<20; i+=2)
  {
    if(yPos >= plats[i]-3 && prevyPos < plats[i] && xPos < plats[i+1]+platwidth && xPos > plats[i+1])
    {
      yPos=plats[i]-3;
      upvelocity=4.5f;
    }
  }
  }
  // If dead
  else{
    deadstate++;
    if(deadstate==1) {
      M5.Lcd.fillRect(0, 0, 80, 160, BLACK);
      xPos = 40 / 2;
      yPos = 0;
      M5.Lcd.setCursor(10, 60);
      M5.Lcd.printf("Score: %d", step);
      M5.Lcd.println();
      M5.Lcd.print("Press Joystick to start");
    }
    // Press button to restart
    if(button_data == 0){
            M5.Lcd.fillRect(0, 0, 80, 160, BLACK);
            pressstate=0;
            upvelocity=0;

            step=0;
            dead=false;
            deadstate=0;
    }     
  }
  delay(33);
}

ライブラリにはスケッチ例はなく、UNITのを使いまわそうと思ったら動きませんでした。さらに探したところ、別のところにありました。

新製品が販売されると、ここに追加されてその後に各ライブラリとかに反映されるのですが、最近販売されたものはライブラリまで反映されていないようです、、、

どこかでHATとかの情報を棚卸しして、足りないスケッチをコピーしてPRする必要がありそうです。

このスケッチはゲームになっていて、ジャンプして登っていくようになっているので、デモにはいいですが、サンプルとしてはちょっと冗長な気がします。

シンプルなスケッチ例

#include <M5StickC.h>
#include "Wire.h"

#define JOY_ADDR 0x38

void setup() {
  M5.begin();
  Wire.begin(0,26);
  M5.Lcd.setRotation(3);
}

int8_t x_data;
int8_t y_data;
int8_t button_data;
char data[100];
void loop() {
  // put your main code here, to run repeatedly:
  Wire.beginTransmission(JOY_ADDR);
  Wire.write(0x02); 
  Wire.endTransmission();
  Wire.requestFrom(JOY_ADDR, 3);
  if (Wire.available()) {
    x_data = Wire.read();
    y_data = Wire.read();
    button_data = Wire.read();
    sprintf(data, "x:%d y:%d button:%d\n", x_data, y_data, button_data);
    Serial.print(data);

    M5.Lcd.setCursor(1, 30, 2);
    M5.Lcd.printf("x:%4d y:%4d button:%d\n", x_data, y_data, button_data);
  }
  delay(200);
}

こちらはUNIT版のをベースに作りました。UNIT版とはI2Cのアドレスが違うのと、呼び出す前に0x02を書き込む必要があるみたいです。

縦と横は中心が0でプラス・マイナス120ちょっとが限界値みたいです。たまに-128という無効値を取得しますので、その値は無視したほうが良さそうです。

また、ボタンがあり、通常が1で、ボタンを押し込むと0になります。

まとめ

大きさ的にはかなりぴったりで、便利に使えそうなHATですが金属を直接触るのはちょっと痛いです。

似たようなジョイスティックからキャップを取り外してつけることができそうですが、できれば最初からつけてほしいですね。ただケースに入れたことで、すくまがなくなって動かない可能性もあります。

ちなみに下の写真が中身です。

M5StickCネジ青のperfect version検証

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

最新バージョンの青ネジありは動作が違うみたいなので、電源周りだけ確認してみました。

検証に利用したM5StickC

左が最新バージョンの5V INとM5STICK・Cの帯が青いバージョンです。ネジが付いていて、5V INが青で判別できます。(ネジなしの5V INが青バージョンもごく少量ありますが、M5STICK・Cの帯は赤です)

右がその一つ前のバージョンで、赤のネジ付きです。現在国内流通で一番新しい在庫がこれのようでした。

perfect version?

内部的にはperfect versionと呼ばれているようです。ただ、まだ新しいバージョンがでそうな気がします(笑)

M5Stack社はわりと製品仕様を変更してきます。そして変更点を教えてくれないので、自分で調べるしかありません、、、

ファクトリーテストについて

最初に電源を入れたときに動作するファクトリーテストが更新されていました!

まだこのバージョンのソースコードは公開されていないようです。

右ボタンのバグについて

BtnBを押した場合、消費電流が100mA程度増えるバグが存在していました。プルダウンで使っている抵抗値を間違えているみたいです。

青バージョンでは修正されているのが確認できました。このバグは定期的に治ったり、再発したりするので、今後のバージョンで再発する可能性があります。。。

とりあえず技適マーク付きのSH200Qと、5V INが青バージョンは修正されているのが確認されています。動作的には問題がありませんので、バグ該当バージョンでの動作に問題はありません。ただし消費電流が多いのと、抵抗値の定格を超えている気がするので、ボタンを常に押すなどの操作は控えたほうがよさそうです。

電源管理について

上のTwitterでも報告されていましたが、電源OFFだと5V OUTへの電源出力がなくなっていました。

ネジ青バージョンネジ赤バージョン
電源ON:5V OUT5V5V
電源ON:BATバッテリー電圧バッテリー電圧
電源ON:3V33.3V3.3V
電源ON:GROVE VCC5V5V
電源OFF:5V OUTバッテリー電圧
電源OFF:BATバッテリー電圧バッテリー電圧
電源OFF:3V3
電源OFF:GROVE VCCバッテリー電圧

電源OFFのときに5V OUTとGROVE VCCに出力されていた、バッテリー電圧が出力されなくなりました。

これで外部に接続した装置に電源OFFなのに、電源を取られることがなくなりました。M5StickCの電源と連動して動かすことができるようになったので、便利だと思います。

とはいえ、まだまだネジ青バージョンが普及していないので、外部に接続して電源連動をしたい場合には、連動していないM5StickCもあることを考慮しておいてください。

まとめ

RTCの表記も増えているので、どんどん裏側の表記が小さくなってきています、、、

この手のバージョン差異を公表してくれると嬉しいのですが、サイレントに更新されていて、最新バージョンが欲しくても過去の在庫をランダムで送付しているので、ガチャ状態で買う必要があります。

国内在庫に最新バージョンが入ってくれば、目でみて選べるんですけれどね。とはいえ、在庫の回転は非常に早そうなので、もうちょっとしたら全部ネジ付きになるかな。