Upgrade to Pro — share decks privately, control downloads, hide ads and more …

mruby-esp32におけるペリフェラルAPIの実装検討

Y_uuu
September 16, 2023

 mruby-esp32におけるペリフェラルAPIの実装検討

2023-09-16(土) 15:00-15:20
松江Ruby会議10 session6
https://matsue.rubyist.net/matrk10/

mruby-esp32は、ESP32というマイコン上でmrubyを実行するためのオープンソースソフトウェアです。このプロジェクトでは、GPIOやWi-Fiなどのマイコンの周辺機能は既に使用可能ですが、一部の周辺機能はRubyプログラムからの利用がまだ困難な状況にあります。そこで、これらの周辺機能を利用するためのAPIを定義し、mrbgemとして実装する試みを行っています。本発表では、周辺機能を利用するためのAPIの実装に関する検討過程を紹介します。

Y_uuu

September 16, 2023
Tweet

More Decks by Y_uuu

Other Decks in Programming

Transcript

  1. 今年3度目の地域Ruby会議登壇 🎉 4 2023-02-18 福岡Rubyist会議03 mruby on IoT devices. 2023-03-04

    鹿児島Ruby会議02 mrubyでマイコンの世界に足を踏み入れる 2023-09-16 松江Ruby会議10 mruby-esp32における ペリフェラルAPIの実装検討 \ New /
  2. mruby-esp32 • binファイルをROMに書き込むことで起動 • FreeRTOS(組込み向けのリアルタイムOS)上でmrubyが動作 10 ESP-IDF Project Component Main

    Component mruby Toolchain mruby-esp32.bin ESP32-DevKitC FreeRTOS アプリケーション mruby MrubyTask コンパイル・リンク アップロード (ROMに書き込み) Library
  3. 使い方1. ESP-IDFをインストール • インストール手順はESP-IDF Programming Guide > Get Startedを参照 11

    https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html
  4. 使い方5. 書き込み・起動 • idf.py -p (PORT) flash monitor コマンドで書き込み・起動します 15

    LEDと反対側のボタンを押して、 モードを切り替える 実機での出力を シリアル通信で確認
  5. ペリフェラルとは • 直訳すると「周辺機器」 • マイコンに搭載された「外部機器を制御するブロック」を指す 18 マイコン サーボモータ ジャイロ 


    スティック LED 超音波センサー 距離センサー マトリクスLED GPIO PWM I2C SPI UART ADC ※センサー・接続方法は一例です
  6. ペリフェラルとは • 直訳すると「周辺機器」 • マイコンに搭載された「外部機器を制御するブロック」を指す 19 マイコン サーボモータ ジャイロ 


    スティック LED 超音波センサー 距離センサー マトリクスLED GPIO PWM I2C SPI UART ADC ※センサー・接続方式は一例です 広義のペリフェラル マイコンにおける ペリフェラル
  7. ESP32で使用できるペリフェラル(抜粋) • 以下のようなペリフェラルが利用できる 20 ペリフェラル 説明 使用例 GPIO General-purpose input/output

    汎用入出力。電気信号を入出力できる Lチカ、スイッチの入力、など ADC Analog to Digital Converter 電気信号をアナログ→デジタルに変換する ジャイロスティック、温度センサー、など UART Universal Asynchronous Receiver Transmitter 非同期式のシリアル通信 PCや他モジュールとの通信、など I2C Inter Integrated Circuit 同期式のシリアル通信(信号線2本) 他モジュールとの通信、など SPI Serial Peripheral Interface 同期式のシリアル通信(信号線3本) 他モジュールとの通信、など PWM Pulse Width Modulation 指定した幅のパルスを出力する LEDの明るさやサーボモータの制御、など
  8. 処理系ごとのペリフェラルクラス • ペリフェラルクラスは処理系ごとに実装されていて仕様もまちまち 21 ESP32 FreeRTOS mruby Plato なし(ベアメタル) mruby

    Raspberry Pi Pico なし(ベアメタル) PicoRuby Raspberry Pi Raspberry Pi OS ruby-spi pi_piper 存在しない? 例: 2023年6月時点のSPI通信対応状況 SPI Ruby H/W OS VM ライブラリ mruby-plato-spi
  9. 処理系が変わるとアプリも修正しないといけない • その処理系のSPIクラスの仕様を確認して、書き換える必要がある 22 Raspberry Pi Pico なし(ベアメタル) PicoRuby Raspberry

    Pi Raspberry Pi OS ruby-spi pi_piper SPI Ruby H/W OS VM ライブラリ SPI通信アプリ アプリ SPI通信アプリ そのまま流用は できない
  10. 処理系が変わるとアプリも修正しないといけない • その処理系のSPIクラスの仕様を確認して、書き換える必要がある 23 Raspberry Pi Pico なし(ベアメタル) PicoRuby Raspberry

    Pi Raspberry Pi OS ruby-spi pi_piper SPI Ruby H/W OS VM ライブラリ SPI通信アプリ アプリ SPI通信アプリ そのまま流用は できない Rubyでもmrubyでもmruby/cでも ArrayやStringは共通なのに… ※ArrayやStringもバージョンの違いやメソッド ごとの対応状況の違いはあります