RISC-VマイコンK210搭載『Sipeed MAix』『M5StickV』
今、話題のRISC-Vコア、AIアクセラレータKPU内蔵マイコンK210搭載 Sipeed MAix、M5StickVの話題を扱います 64bit 400MHz RV64GCのRISC-Vコアを2コア搭載 RV64GCなので単精度、倍精度浮動小数点演算もOK AIアクセラレータのKPU内蔵 MicroPython環境のMaixPyやArduino IDEでの開発が可能です |||o|o|o|ooo|||o|o|||o|o||o||||||ooooo||oo|ooooo|||o|o|||oooooo||||o|ooo|ooo ooo|o||oo|o|oo||oo|||o|o||oooo|o||||||oo||oo||o|o||o||oo|ooo|oo||o|o|o|oo|o| o|oooo|oo|o|o|o||o||||ooo|oooo|||oo|||oo||||||oo||o|||o||ooooooooo|o|||||oo| o|o|oooo|||||o|oo|oo||o|oo||o|o||||o||oooo|o|oo||ooo||||o|o||oo||||o|o|ooooo |ooo|o||o|ooo|ooo|ooo|ooo|o||o|ooo|o||||||ooo|oo||ooo|||o|||oo|o|oo|||||o||| o||ooo||o|||ooo||||oo|o||o|oo|ooo||oo||||ooo|||||ooooo|oo|oooooo|o|||o|o|||| |||o|o|o|oo||oo||oo||o||o||ooooo|||o|ooo||||ooooo|o|o||oo|o|ooooo|o|||o|o||| |o|||o||||||o|o||oo|o|||o||||oo|o|oooo||oooo|o||oo|o|ooo|ooo|o|||ooo|o|ooo|o |o||oo||oo|||o|o||o||oo|oo|ooo|o|||oo||ooooooo|||o||||||oo|o|o||ooo|||ooo|oo |o|oooo||o|o|o||||o||ooooo|ooo||||oo||||o||o|||ooo|||ooo|o|||||oo||o|ooooooo |oooooo|ooo|o||o||oooo||o|oo|o|||||o||||||o||||o||o|oooooo||ooo||oo||ooo||o| |oo|||ooo|o|||o|o|oo|oooo|o|oo||o|oo|ooo|||o|||o||||o|||o|||o|o|oo|ooooo|o|o oo|o||o|ooo||o|oooo||o|ooo|o|ooo|ooo|||o|o||||o||o||oo|o||o|oo|o||o|||oo||o| o||o|o|oooo|o|o|o|o|||o|o||o||||oo||oooooo|ooooooo|o|||||o|oooo|o||||||oo||| o||oo||ooo|oo|oooo|o|||oo|||o|||oo||||||||o||||oo|oo|oo||||o|o||ooo|oooooooo oo|o|oo|oooo||o||o|ooo||o|||||||o||ooo|oo||oo||oooo|oooo||||oo|o||oo||o||o|| ooo|o|o||oo|oo|o||o||o|o|||o||oooo|oooo|||ooo|o|o|o||o||o||o|||ooooo|oo||||| |||||o||o|||||oo|o||oo|||o|oo||o||o||oo|o|oooooo||o|o|oo|oooo||||ooo|o|ooooo ooo|oooo|ooo|||||o|o|||||oo||oooo|o|||oo|ooooooo|||||oo||o||oo||oo|o||||o|o| ooo|o||o||oo||o||o|o|oo|oo|oo|o|o||oo|||ooo|o|||ooo|||o|oo|oo|o|o|oo|o|||||o |o|o|o|o|o||o|o|||||oooo|o||oooo||oo|oo|||oo|o|o|oo||oo||ooooo||o|||o|o|o|o| |oo|o|oo|||o||ooooo|oo|o|ooo|||oo||oo|oo|||o|o|ooo|||ooo||||||oo||o||ooo||o| ||||ooo|ooo|||o|oo||oo|||o|o|o|oo|o|ooo|||o||||ooo||||oooo|oo||o||oo||ooo|oo |o||ooo|o|o|oo||oo|oo|o|oo||o|||ooo|||o|o|oooo|||o|ooo|oooo||||o|o|oo||o|||| oo|||o|o|oo||ooo||ooo|ooo||o|o|oo|o||oo|o|||o||||o|o||o|oo|ooo|o|o|ooo|o|||| oooo||oo|ooooo||ooo|||||||oo||o||||ooo|oo|||oo|ooo||oo|||||o||o|ooooo||oo||| ||oooo||||o|ooooo||||o||ooo||oo|o||o|oo||o||oo|oo||ooooooo|o|||o|ooo||||o||| o||o||o|oo|||ooo|o|o|ooo||||o|||oo|oo|o||oooo|ooooo|oo||o||||ooo|o|o|o|||o|| |||o|o|||||ooooo||||ooooo|o|||ooo||o|||ooo||o||||o||o|oo|oooo|ooo||||oooo|oo ||o||oooo||o|o|o||||oo|o|oo|oo|ooo|o||o|o|oo|||oo|||o|o|o|oo|||oooo|oo|||o|o oo||oo||oo||oo|||o|o|oo|||oo|oo|ooo||o||oo|ooo|o||oo|oo|oo|oo||||o||||o|oo|| ||o|oooo|o|o|oo|o||o|oo|ooo||o||oo|o|||o||o||||oo|ooo|||ooooo||o|o|o|o||o||o o|||o|||o|o||||||||ooo|oooo||oo|oo||oo||o|||||||o|o|o|ooo|o||o|o|ooooooooooo o|ooooo||||||oo|o|oo||o|o|oooo||o||oo||oo|o|oooooo|o|o||o|o||oo||o|o||o||||| |oo||||oo|o|oo|ooo|||o|o||||ooooooooo|o|||oo||ooo|o|oo|ooo|o|||o|o|o|||o|||| o||oo|oo||||ooo|o|o|o|oo||o||oo|||oooooo||ooooooo|||o|o|o|oo|||oo||||||||oo| ||o||oooo|||oo||||oo||oooo||o|||oo||o|||oooo||oo|oooooo|oo|||o||||oo|||oooo| ||o|o||ooo||o|ooo||oo|oo|oo|o|oo|o|||oooo||ooooo|||oo||ooo||||oo|o|o||o||||| ooo|||ooo|||o|o|o||o||||ooo|o|oo|oo||||oo||o||oo||oooo||ooo|oo||o||o|oo|o|o| o||o|o||o||||oooo|||ooo||ooo|oo|||o|o||o||oo|o|o|ooo|||o|ooo|o|oo|||||ooo|oo |||oo||||oo|oo|||o||o|o|o||oo|o|ooooo||o|ooo|||o|o|||oo|ooo||oo|o||ooooo||o| ||ooo||o|oo|o||ooo|o|o|||ooo|oo|o|oo|||||oo|ooo||o|ooo|oo||||o|ooo||o|o|||o| o|o|||o|||oo||oooo|||ooo||ooo||oo|||oooooo|||oo|||||oo|oo||||o|o|o|ooo||o|oo oo|o|o||||oooo||||o|oo|||ooo||o|oo|oo||||||oo||ooo|ooo||o|||oooo|o|oo||||ooo |o||o|o|o||oo|||o||o||oo|||o|||o||o|oo||oo||o|||ooo|oooo||ooo||ooooo|o||oooo oo|o|||||oo|oooooo||oooo|o|oo|o||oo|o|ooo|o||||oo|o|o||||||oo|ooo||||o||oo|| |||o|oo||o||||ooooooooooo|o|oo||||ooo||o||o|||oooooo|o||o|||oo||o|o||ooo|||| ||o|||||o|oo|oo|||o|||o|oo|||||o|o|||ooo||ooooo|o|o|oooo|o||o|oo||oooo||oooo ||o|||o|o||o|||o|o||oooo|ooooooooo|ooo|oooo||oo|o||ooo||||o|||||ooo|o||o|||| |||oo|||||o|ooo|o||o|oo|ooo||ooo|o|o|ooo||oo|o||o||oo||o||oo|o|o|oo||o||o|oo Sipeed MAixもっと高性能にすればいいのに M5StickVはArduino IDEは使えなさそうですね MaixPy IDEのみの対応だと思います 無線LANないから写真撮ってSDカードに記録か。 高性能な画像処理は何に生かせばいいんだよ? Maixduinoならwifiも付いてるね(技適ありらしい) MaixduinoならArduino IDEも使えるからいいね MicroPythonからじゃ、RISC-Vをいろいろいじってみたい人には向かないね Arduino IDEならインラインアセンブラが使える RISC-Vいろいろ弄りたいならQEMUのRISC-Vポートがええ QEMUも使うけど、実際のRISC-Vプロセッサでも実行したくなるじゃん MaixduinoならArduinoに対応してるし、Arduinoはお手軽だから手を出しやすい MaixduinoはQVGAのLCDやカメラもついてるし RISC-VやKPU関係なしにいろいろやりたいなら M5Stackの方が人気がある分、M5Stackの方がいいかもしれないけどね ちなみにM5Stackの話題はこっちで扱ってるようだ 格安wifiモジュール「esp8266」「esp32」 3個目 https://rio2016.5ch.net/test/read.cgi/denki/1556620556/ M5StickVはMicroPython使いたい人やMicroPythonでのAIに興味がある人向けだね それ以外の人は人気のあるM5Stackの方がいいと思う M5Stackはいろいろな開発環境に対応してるようだし 正直、CPUなんて何でもいいし、開発環境もCコンパイラがあればいい。あとはそこそこのライブラリか。 M5stack はハードを出すのはいいが、ちゃんとライブラリの整備をしないからダメだ。 RAMが8MB(KPU用に2MB取られてるので実際は6MB)なのは魅力 Arduino環境でDhrystone2.1動作するようにして計測してみた Aruduinoの環境のgccのオプションはサイズ優先のOsとなっているのをO2に変更してコンパイル 結果、1248003.1で1757で割ると約710DMIPS MHz当たりの値はおよそ1.77DMIPS/MHz GCCでコンパイルした結果としては思ったいたよりいい結果がでました O3にしてやってみました 結果は1310822.1で1757で割ると約746DMIPSで約1.86DMIPS/MHzでした 64bit RV64GC Sipeed MAix Bit Suit (液晶・カメラ付) http://akizukidenshi.com/catalog/g/gM-14471/ 1個 ¥3,000(税込) 32bit RV32IMAC(単精度、倍精度浮動小数点命令がありません) Sipeed Longan Nano RISC−V GD32VF103CBT6開発ボード http://akizukidenshi.com/catalog/g/gK-14678/ 1個 ¥830(税込) Sipeed Longan Nanoはインターフェースの記事によると最高動作周波数は108MHzだそうです Flash 128KB、SRAM32KB USB2.0OTG、UART、SPI、I2C、I2S、CAN デジタル入出力 37、PWM 4、アナログ入力 2、アナログ出力 2 開発環境はPlatform IO IDE Sipeed MAix Bit RV64GC 最高動作周波数400MHz 2コア搭載 キャッシュは命令、データともの32KB Flash 16MB SRAM 8MB (6MB+2MB(KPUが使用)) USB:シリアルポート UART、SPI、I2C、I2S PWMなし、アナログ入力なし、アナログ出力なし アクセラレータ:KPU、APU、FFT、AES、SHA256 LCD:320x240 MaixduinoはwifiやBluetoothが使えるが JTAGデバッガ用の信号線がピンソケットにつながってないのが欠点 JTAGデバッガをつないでPlatformIOでデバッグしたい人は要注意 mouserで送料無料にしたかったからsipeedぽちったわ Sipeed Longan NanoはArduino用のSipeed Longan Nan専用ライブラリが全くないね お手軽にPlatformIOでArduinoプログラミング使用と思ってる人にはきついかも Sipeed MAixシリーズはLCDのライブラリとかかなり充実してる どんなものか知りたい人はArduinoIDEやPlatformIOで プログラミング環境だけは製品を持ってなくてもコンパイルまでは試せるので どんなものか確かめたほうがいいかも Windowsの場合、 platformIOの場合、c:\Users\xxxxxxxx\.platformio\packagesにツールチェインや Frameworkのライブラリが入るのでそのあたりを確かめてみるといい Arduinoのライブラリは Sipeed Longan Nano用はframework-arduino-gd32vに Sipeed MAix用はframework-maixduinoに ツールチェインは Sipeed Longan Nano用はtoolchain-gd32vに Sipeed MAix用はtoolchain-kendryte210に入る Sipeed MAix用はFrameworkにArduinoのほかに Kendryte SDK(StandaloneとFreeRTOS用が選択できる)が選択できて Standalone用はframework-kendryte-standalone-sdkに入ってる ArduinoのSipeed MAix用の専用サンプルはframework-maixduino\librariesの 各ライブラリの中にexamplesというディレクトリがあって その中にそれぞれのライブラリ用のサンプルが入ってます あと、Sipeed MAix用の各ライブラリの中のexamplesディレクトリのサンプルはArduino IDE用なので PlatformIOからArduinoを使ってる人は少し改変が必要 Sipeed Longan Nanoを持ってないが、PlatformIOで試してみた まず、Serialが宣言されてない模様 Printクラスを継承して1バイトを書き込むsize_t write(uint8_t)を自分で実装すればprintメソッドは使えそう 空のwriteメソッドを作ってコンパイルだけして どれだけの容量を食うのかテストしてみたが51950(flash容量の39.6%)も使うね Maixduinoは持ってるがMaixduinoと比べるとflash容量で苦労しそう LCDのドライバらしきものも見当たらないしMaxiduinoと違っていろいろ苦労しそう Sipeed MAixシリーズはMaixPyやArduino環境でお手軽にいろいろ作れるが Sipeed Longan Nanoは上級者向けという感じがする Maixduinoはピンソケットにつながってるピンの数が少ない http://dl.sipeed.com/MAIX/HDK/Maixduino/Specifications/Sipeed%20Maixduino%20Datasheet%20V1.0.pdf このPDFの4ページ目の表でMaixduino silkと書かれてるところが ピンソケットにつながってる部分でMAix Bitより少ないので注意が必要 MAix Bitではなく、MaixduinoでオンボードのLEDをLチカさせる場合は 13番ピンではなく1番ピンにするとオンボードのLEDがLチカする MaixduinoでMaixPyでLチカするのにはISP_TXを指定するとLチカするね TXにGPIOを割り当てるので当然、実行するとUSB-Serialの接続は切れるので 再開するにはMaixduinoの再起動が必要になるけど import utime from Maix import GPIO fm.register(board_info.ISP_TX, fm.fpioa.GPIO0) led_r = GPIO(GPIO.GPIO0,GPIO.OUT) led_r.value(0) utime.sleep_ms(500) led_r.value(1) utime.sleep_ms(500) led_r.value(0) utime.sleep_ms(500) led_r.value(1) utime.sleep_ms(500) M5StickVはMaixPy専用のようです PlatformIOのリストには出てきません PlatformIOではこれらのリストが出てきます どれもArduino、Kendryte-standalone-sdk、Kendryte-freertos-sdkの3種類が選択できます Sipeed MAIX BIT Sipeed MAIX GO Sipeed MAIXDUINO Sipeed MAIX ONE DOC Sipeed MF1 MF1 Arduino IDEでも使えます 製品を持ってなくてもライブラリを確認したりコンパイルはできるので どの程度のことが可能か、確かめてから買うこともできます ネットで検索するとArduino IDEの最新バージョンでMAixシリーズで不具合があるというのがあるね Arduino IDEは1.8.9を使うのをオススメ 1.8.9はここからダウンロードできる https://www.arduino.cc/en/Main/OldSoftwareReleases#previous 追加のボードマネージャのURLはこれ http://dl.sipeed.com/MAIX/Maixduino/package_Maixduino_k210_index.json また、ボードマネージャは0.3.11だとカメラのライブラリを読み込んでくれなかったので 0.3.10のインストールをオススメ インストールするとボードに Sipeed Maix One Dock Board Sipeed Maix Bit Board Sipeed Maix Bit-Mic Board Sipeed Maix Go Board Sipeed Maixduino Board これらを選択できるようになる Maixduinoはピン数は少ないし、 wifiはMaixPyからだと簡単に使えるがArduinoから使う方法がわからない Arduinoからwifi使いたい場合、自分で外付けでESP32つないだ方が簡単そうだ Maix BitにESP8266つないでる人ならいるみたいだね Maix Go用のライブラリがそのまま使えそう MaixduinoにESP32をつないで ArduinoのMaixGo用のWiFiのライブラリを改変してESP32で使えるようにできました WiFiのライブラリはutilityディレクトリのEspDrv.cppの中のESP8266用のコマンドを ESP32用に変えるだけ ESP32ではESP8266と少しコマンド名が違うだけなのでそれを修正するだけで動いた ESP32ではなくESP8266をつなぐ場合おそらく修正は不要だと思われます WiFiのデモサンプルを実行する場合は ESP32をつないだピンを Serial1.begin(115200, 6, 7); // bitrate, rx, tx WiFi.init(&Serial1); のようにESP32につないだピンソケット番号を指定する必要があります。 ピン番号はMaixduinoの場合はピンソケットのピン番号になります。 Maix Bitの場合は実際のMaix Bitのピン番号とK210のピン番号が一致してます。 ESP32のシリアルスピードはデフォルトで115200です。 余談ですが MaixduinoでArduinoのGPIOやSerialのライブラリで指定できるピン番号は ピンソケットの番号のみでピンソケットにつながってないピンは指定できません。 (ピンソケットにつながってないピンを指定したい場合は、ライブラリを改変する必要があります) ここのサイトを参考にMaixduinoのLCDに日本語表示することができました ttp://nopnop2002.webcrow.jp/HSES-LCD24/HSES-LCD24-3.html ttps://github.com/h-nari/Fontx ttps://github.com/h-nari/Humblesoft_GFX MaixBitでもいけると思います RomFontxを試したのですが 当初はフォントの配列からデータを正常に読み込めませんでした Fontx.hのIMPORT_BINのマクロを定義してるところで ".section \".irom.text\"\n" のところを ".section \".rodata\"\n" に修正したらフォントの配列からデータを正常に読み込めるようになりました uni2sjis.hの #include <pgmspace.h> のところを #include <avr/pgmspace.h> に変更 LCDドライバのSipeed_ST7789.hとSipeed_ST7789.cppを名前を変えてコピーして Adafruit_GFXからの継承ではなく、Humblesoft_GFXからの継承に改変 Humblesoft_GFX.hのprotected:のところに uint8_t textsize_x; uint8_t textsize_y; uint8_t textsize; を追加 public:のところに void setTextSize(uint8_t _textsize); void setTextSize(uint8_t _textsize_x, uint8_t _textsize_y); を追加 Humblesoft_GFX.cppに void Humblesoft_GFX::setTextSize(uint8_t _textsize) { textsize_x = _textsize; textsize_y = _textsize; textsize = _textsize; Adafruit_GFX::setTextSize(_textsize); } void Humblesoft_GFX::setTextSize(uint8_t _textsize_x, uint8_t _textsize_y){ textsize_x = _textsize_x; textsize_y = _textsize_y; textsize = (_textsize_x >= _textsize_y ? _textsize_x : _textsize_y); Adafruit_GFX::setTextSize(textsize); } を追加 こんな感じでRomfontxで日本語表示ができました FsFontxは試してません エロい人おしえてください aruduino ideで開発環境整えたんですが プログラムの教本みたいHPは どこがお奨めですか? リファレンスマニュアルみたいのが あれば助かります。 パイソンのリファレンスマニュアル そのままって事無いですよね? ハードウェアの絡みもあるし ちなみに私はPlatformIOのArduinoで試しました テストスケッチはこんな感じです #include <Arduino.h> #include <SPI.h> #include <Adafruit_GFX.h> // Sipeed_ST7789.hとSipeed_ST7789.cppをAdafruit_GFXではなく、Humblesoft_GFXから継承するようにしたもの #include "Humblesoft_Sipeed_ST7789.h" #include "Fontx.h" // https://github.com/h-nari/Fontx // FONTファイルはプロジェクトのディレクトリのルートに // fontxというディレクトリを作成し、その中に入れてます。 IMPORT_BIN("/fontx/ILGH16XB.FNT", ILGH16XB); //16ドット半角ゴシックフォント IMPORT_BIN("/fontx/ILGZ16XB.FNT", ILGZ16XB); //16ドット全角ゴシックフォント IMPORT_BIN("/fontx/ILMH16XB.FNT", ILMH16XB); //16ドット半角明朝フォント IMPORT_BIN("/fontx/ILMZ16XB.FNT", ILMZ16XB); //16ドット全角明朝フォント extern const uint8_t ILGH16XB[], ILGZ16XB[], ILMH16XB[], ILMZ16XB[]; // FONTのデータからFontxのフォントを生成 RomFontx font_gothic(ILGH16XB,ILGZ16XB); RomFontx font_mincyo(ILMH16XB,ILMZ16XB); SPIClass spi_(SPI0); // MUST be SPI0 for Maix series on board LCD Sipeed_ST7789 lcd(320, 240, spi_); void setup() { lcd.begin(15000000, COLOR_RED); lcd.setRotation(3); lcd.fillScreen(COLOR_RED); lcd.setCursor(0, 10); // Fontxのフォントを表示 lcd.setTextSize(1); lcd.setFont(&font_gothic); lcd.print("16ドットゴシック\n"); lcd.print("日本語表示\n"); lcd.setFont(&font_mincyo); lcd.print("16ドット明朝\n"); lcd.print("日本語表示\n\n"); lcd.setTextSize(2); lcd.setFont(&font_gothic); lcd.print("16ドットゴシック\n"); lcd.print("日本語表示\n"); lcd.setFont(&font_mincyo); lcd.print("16ドット明朝\n"); lcd.print("日本語表示\n\n"); } void loop() { } >>39 私は一般的なArduinoの情報以外は ライブラリのサンプルスケッチと直接ライブラリのヘッダーファイルやソースコードを見て参考にしてます PlatformIOだと c:\Users\ユーザ名\.platformio\packages\framework-maixduino の下にMaixのArduino coreとそのライブラリのファイルがあります ツールチェインのヘッダーファイルを見ることもあります。 c:\Users\ユーザ名\.platformio\packages\toolchain-kendryte210\riscv64-unknown-elf\include ArduinoIDEのディレクトリ構成はよくわからないですがおそらく c:\Users\ユーザ名\AppData\Local\Arduino15\packages\Maixduino\hardware\k210\0.3.10 この下にArduino coreとMaix用のライブラリがあると思います あとは公式のDocumentですがあまり詳しくないです https://maixduino.sipeed.com/en/ 公式BBS https://bbs.sipeed.com/ あとはM5sticVでMaixPyを実機で調べてる人がいるようです ttps://qiita.com/Lathe/items/0f0c9b75928d52a7d502 39です。 色々リンクありがとう 参考になりました。 結局はパイソンライクなコードみたいですが、ちょっとCと違うので 戸惑ってました。 研究してみます。 ついでに、ハードウェアもいじってる エロい人教えて下さい。 GPIOの取り出しは純正のI/O使ってますか? 値段とデリバリーが悪そうなので、代替があれば教えて下さい。 Arduinoのシールドを使わなくてもGPIOやI2C、SPIなどは使えますよ デジタルI/Oポートを増やしたいのでしょうか? デジタルI/Oポートを増やしたいならI2C接続のこんなのありますよ 価格は120円ですw https://www.petitmonte.com/robot/howto_io_expander.html 16bit I2C I/Oエキスパンダー MCP23017 http://akizukidenshi.com/catalog/g/gI-09486/ >>44 Maxiduinoでは3つの開発環境がある 1.Maix用のMicroPythonであるMaixPyを使った開発環境 2.Arduinoを使った開発環境 3.Maixが使ってるチップのK210のメーカーが出してるSDKによる開発環境 Pythonライクに見えるのは、MaixPyのソースコードだと思わます MicroPythonなのでPythonそのものです Maixduinoのアナログピンは特殊です MaixduinoはマイコンとしてK210が使われていますが K210にADCの機能はないためオンボードのESP32のADCがアナログピンに割り当てられてます そしてオンボードのESP32は特殊なFirmwareが組み込まれてるようで MicroPythonのMaixPyのv0.4.0からはWiFiやADCの機能は使えるのですが (v0.3.2はMaixduinoのWiFiやADC機能は対応してないようです) 今のところArduinoから使う方法が全くわかりません 今後、Arduinoから使うためのライブラリが公開されるかもしれませんが 現状ではMaixduinoのオンボードのESP32を使ったWiFi機能とADC機能は MaixPy専用だと思った方がいいです WiFi機能はESP-WROOM-02を新たに購入して外付けでSerialでつなげば ArduinoのMaixGo用のWiFiライブラリは使えるようです MaixPyのADC機能を使ったサンプルプログラムは networkのカテゴリの中にあります。(ESP32のADCを使ってるためだと思われます) https://github.com/sipeed/MaixPy_scripts/blob/master/network/demo_esp32_read_adc.py このサンプルプログラムを走らせると19行目の adc = nic.adc( (0,1,2) ) でエラーになります。(まだ引数を指定した機能は実装されてない) まだMaixPyのv0.4.0はPreReleseなので全機能が実装されてないのかもしれません ここをコメントアウトすればとりあえず動作します MaixPyのv0.4.0はここにあります https://github.com/sipeed/MaixPy/releases このページのv0.4.0の中の maixpy_v0.4.0_50_gcafae9d.bin これがMaix用のMaixPyのファイルです。 https://github.com/sipeed/kflash_gui/releases/tag/v1.3.2 ここのkflash_guiを使ってMaixduinoなどのMaixシリーズに書き込みます 皆さんありがと M5stackは、displayやSPが付いていて デバッグやちょっと弄るのに楽でいいですねw aruduinoIDE上だと、コンパイルが遅いね。プレファレンス書き換えると 早くなると書いてありましたが、効果が実感できません。 どこが悪いんだろう? >>49 Maixduinoだと思ってたのですが違うのか お持ちのものは何なのでしょうか? M5StickV?、それともS5Stack? M5StickVなら搭載マイコンがK210なのでこのスレでいいですが M5StackならESP32というマイコンを搭載してますので下記のスレになります 格安wifiモジュール「esp8266」「esp32」 4個目 http://rio2016.5ch.net/test/read.cgi/denki/1574506387/ >>45 のI/OエキスパンダーのMCP23017はMaixシリーズでは ArduinoでAdafruitのMCP23017のライブラリがそのまま使えるようです。 https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library Adafruit_MCP23017.cppの14行目からの #ifdef __AVR #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> #endif を //#ifdef __AVR #include <avr/pgmspace.h> //#elif defined(ESP8266) // #include <pgmspace.h> //#endif のように15行目を残してコメントアウトして avr/pgmspace.hをインクルードするようにするだけで使えます。 使用するときは開始アドレスとして MCP23017のピンのA2,A1,A0のアドレス値を0から7までの数値で入れます >>46 に載ってる回路図だとA0がHIGHになってるのでこの場合は mcp.begin(1); A2,A1,A0を全部グラウンドに接地した場合は mcp.begin(); となります。 mcp.pinMode(0, INPUT); mcp.pullUp(0, HIGH); // これはMCP23017の内部プルアップをする指定です。 mcp.pinMode(1, OUTPUT); mcp.digitalWrite(1, HIGH); uint8_t read_pin = mcp.digitalRead(0); こんな感じで使えます。 この時、MCP23017のGPA0がピン番号0でGPA7がピン番号7 GPB0がピン番号8でGPB7がピン番号15になります。 I2Cの信号ピンを変えたい場合は Adafruit_MCP23017.cppの111行目のvoid Adafruit_MCP23017::begin(uint8_t addr) {の中の Wire.begin(); を Wire.begin((uint8_t)21, (uint8_t)22, 400000); のようにピン番号と周波数を指定すれば変更できます。 第1引数がSDAで第2引数がSCLのピン番号、第3引数が周波数です。 (周波数は省略可能です) この時に指定するピン番号はK210のピン番号になるので要注意です。 追記: Adafruit_MCP23017 mcp; と宣言するのを忘れずに M5StickVならGPIOのプログラムだとこのあたりが参考になると思います M5StickVのGroveコネクタを使う ttps://hrkz.tokyo/m5stickv-grove/ Grove用ケーブル https://www.switch-science.com/catalog/list/435/ 【M5stickV】ランダムな10色に光らせる方法 ~ライト編~ ttps://hellobreak.net/m5stickv-led-9-30/ M5StickVのGroveポートではI2Cも使えるようです。 ttps://twitter.com/robo8080/status/1169133576912347136 ttps://twitter.com/robo8080/status/1169237144742744064 ttps://twitter.com/robo8080/status/1169238906367172608 ttps://twitter.com/robo8080/status/1170225725888069632 ttps://twitter.com/robo8080/status/1170296297271652352 ttps://twitter.com/robo8080/status/1170299180876582914 M5StickVは持ってないのですが M5StickVでArduinoが使えるのなら Maixシリーズと同様にI2Cの初期化でI2Cが使うピンを変更できると思われます。 MaixPyだけでなくArduinoでI2Cが使えるかもしれません (M5StickVを持ってなくて試してないのでできないかもしれませんが。) I2Cの初期化で使用するピンと周波数を指定できます (M5StickVのGlobeコネクタは34ピンと35ピンが割り当てられてるそうです) #define SDA1 34 #define SCL1 35 Wire.begin((uint8_t)SDA1, (uint8_t)SCL1, 400000); こんな感じです M5StickVはGPIOが少ないようなのでI2CでGPIOを増やせたらいいですね https://twitter.com/5chan_nel (5ch newer account) これ安いですね HiLetgo PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー IIC モジュール Arduinoに対応 ロボット https://www. アマゾン.co.jp/dp/B01D1D0CX2/ AmazonのURLは5chに直接貼れないのでwww.アマゾン.co.jpにしてます >>56 一時期URLエンコードして貼ってた時期ありましたが フィッシング詐欺と間違われる可能性もあるのでやめました mcp01 = mcp.MCP23017(address=0x21, gpioScl=30, gpioSda=31) のアドレスは0x21になってますが、デフォルトは0x20です ボードに合わせてMCP23017のアドレスを設定してください Scl、SdaはMaixシリーズではSCLが30、SDAが31がデフォルトです M5StickVの場合は34、35になるかと思います (M5StickVは持ってないのでSCLが34でSDAが35なのかSCLが35でSDAが34なのかわかりません) MaixduinoをMaixPyで使ったときのSPIの使い方がやっとわかりました ネットを探しても、あまり情報が無かったので苦労しました 試しに、SPI接続の温度センサーのADT7310を動作させてみたので紹介します Maixduinoの 2番ピンにCS 3番ピンにMISO 4番ピンにSCK 5番ピンにMOSI を接続してみました Maix Bitでは 21番ピンにCS 22番ピンにMISO 23番ピンにSCK 24番ピンにMOSI になると思います ピンの役割はfm.registerで変更できるので任意のピンに変更することが可能です この部分です SPI1_D0がSPI1のMOSI、SPI1_D1がSPI1のMISOです。 CSは自分で制御したい場合はGPIOで制御します。 fm.register(21,fm.fpioa.GPIOHS0)#cs #fm.register(21,fm.fpioa.SPI1_SS0)#cs fm.register(24,fm.fpioa.SPI1_D0)#mosi fm.register(22,fm.fpioa.SPI1_D1)#miso fm.register(23,fm.fpioa.SPI1_SCLK)#sclk spi01=SPI(SPI.SPI1,mode=SPI.MODE_MASTER,baudrate=125000,polarity=1,phase=1,bits=8,firstbit=SPI.MSB,mosi=fm.fpioa.SPI1_D0,miso=fm.fpioa.SPI1_D1,sck=fm.fpioa.SPI1_SCLK,cs0=-1) #spi01=SPI(SPI.SPI1,mode=SPI.MODE_MASTER,baudrate=125000,polarity=1,phase=1,bits=8,firstbit=SPI.MSB,mosi=fm.fpioa.SPI1_D0,miso=fm.fpioa.SPI1_D1,sck=fm.fpioa.SPI1_SCLK,cs0=fm.fpioa.SPI1_SS0) ソースコードはこちらです https://pastebin.com/4ayBSq7F MaixPyでGPIOエキスパンダのMCP23017を使うその2 >>60 のライブラリはGPLv3なので使いにくいと思い Adafruitの下記ライブラリをMaixPyで動くように移植してみました CircuitPython driver for MCP230xx GPIO Expanders https://github.com/adafruit/Adafruit_CircuitPython_MCP230xx とりあえず、exampleのmcp230xx_simpletest.pyを動くようにしてみました ファイルは4つです digital_inout.py https://pastebin.com/c2VuPWUE mcp230xx.py https://pastebin.com/FXfFmNw9 mcp23008.py https://pastebin.com/MxTVrK0K mcp23017.py https://pastebin.com/pMrGpujQ これら、4つのファイルを uPyLoaderでMaixシリーズ、M5StickVなどにアップロードしておきます https://github.com/BetaRavener/uPyLoader/releases サンプルプログラムはこれ(mcp230xx_simpletest.pyを改変しただけです) https://pastebin.com/keqgBPRm Maixシリーズはsclが30、sdaが31がデフォルトです 他のピンに変更したい場合はscl、sdaの値を変更してください (Maixduinoを使っている場合、指定するピン番号はK210のピン番号ですので要注意です) M5StickVでもscl、sdaを34、35ピンに設定すれば動作すると思います (sclが34ピン、sdaが35ピンなのかsclが35ピン、sdaが34ピンなのかはわかりません) 追記 サンプルのaddressが0x21になってますが>>46 の回路図に合わせてるだけです mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set MCP23017のデフォルトのaddressは0x20です 自分の使用してるものに合わせて変更してください 新しいMaixPyのビルドでヒープサイズを設定できるようになったようです http://dl.sipeed.com/MAIX/MaixPy/release/master/maixpy_v0.5.0_12_g284ce83 import Maix Maix.utils.gc_heap_size() これでヒープサイズが確認できるのと import Maix Maix.utils.gc_heap_size(400000) のようにヒープサイズが設定できるらしいですね ためしに import Maix Maix.utils.gc_heap_size(1000000) を実行したらヒープサイズが1000000になりました あまり大きな値を設定するとMaixPyが起動しなくなるので要注意です Maix.utils.gc_heap_sizeで大きな値を設定してMaixPyが起動しなくなったら 下記の作業をする必要があります。 (LinuxやMacなどの環境が必要なようです。私はWindowsのCygwin上で実行しました gccやg++、makeなどが必要なようです) git clone https://github.com/sipeed/MaixPy cd tools/spiffs mkdir fs python gen_spiffs_image.py ../../projects/maixpy_k210/config_defaults.mk これを実行するとtools/spiffs/fs_imageに空のmaixpy_spiffs.imgができます この作成されたmaixpy_spiffs.imgをkflash_guiで 0xD00000のアドレスに書き込めば起動できるようになります ただし、今までにMaixやM5StickVにアップロードしたファイルの内容は消えます ファイルをダウンロードしたい場合は、古いMaixPyのイメージを書き込んで起動し (maixpy_v0.4.0_50_gcafae9d.binで起動できました) uPyloderでバックアップを取ってから kflash_guiでmaixpy_spiffs.imgをkflash_guiで0xD00000に書き込めばいいはずです 古いMaixPyはここにあります http://dl.sipeed.com/MAIX/MaixPy/release/master/ 追記 import Maix Maix.utils.gc_heap_size(600000) とヒープサイズを設定後、反映されるのはハードリセットした後です ソフトリセットでは反映されません import Maix Maix.utils.gc_heap_size(3000000) までは成功しました import Maix Maix.utils.gc_heap_size(4000000) ではMaixPyが起動しなくなりました 失敗するとMaixPyが起動しなくなるので 空のmaixpy_spiffs.imgが作成できない人は真似しないでください gen_spiffs_image.pyはもともとはflash上のファイルイメージを作成するためのもののようです tools/spiffsにfsディレクトリを作成してその中にファイルを入れるとfsディレクトリ以下のファイルの flash書き込み用のイメージが作成されるようです 紹介動画(アニメーションGIF画像) https://cdn.sipeed.com/pack_spiffs_ops.gif Sipeed Longan Nano、やっと中華USB Blasterでuploadとdebugができるようになったけど、 あんまり早くない・・・ > ** Programming Started ** > auto erase enabled > wrote 87040 bytes from file .pio\build\sipeed-longan-nano\firmware.elf in 103.054993s (0.825 KiB/s) > ** Programming Finished ** > ** Verify Started ** > verified 86224 bytes in 73.658226s (1.143 KiB/s) > ** Verified OK ** Sipeed Longan NanoはメーカーがSipeedというだけでMaixシリーズとは全然別物だからね Arduinoの環境も整備されてるとはいいがたいしMaixPyも使えないし Maixduinoで>>55 のPCA9685モジュールのPWMでLチカをしてみました SCL、SDAを3.3KΩでプルアップしてモジュールにつなぎます VCCにMaixduinoの3.3V、GNDにMaixduinoのGNDをつなぎます LEDはシンク接続で16個つないでみました (抵抗は1KΩを使いました) 今回はMaixPyから使ってみます MicroPython用のPCA9685モジュール用のドライバーソフトが adafruitから出てるようですのでそれをそのまま使います https://github.com/adafruit/micropython-adafruit-pca9685 adafruitのドライバソフトの中のpca9685.pyを uPyLoaderでMaixシリーズやM5StickVに転送してください uPyLoader https://github.com/BetaRavener/uPyLoader/releases テストサンプルはこんな感じです (このサンプルではLEDはシンク接続を想定してます) https://pastebin.com/7XqWVcXn M5StickVでは i2c = I2C(I2C.I2C0, freq=400000, scl=30, sda=31) pca9685_01 = PCA9685(i2c, 0x40) のscl=30、sda=31の部分をscl=34、sda=35もしくはscl=35、sda=34に変更してください PCA9685のI2Cアドレスは自分ものにあわせて適宜変えてください (デフォルトでは0x40です) SPI接続の温度センサーADT7310用の>>63 のプログラムを改良してみました https://pastebin.com/YFgCeRUJ MaixduinoでMaixPyで気温、気圧、湿度センサーのBME280を使ってみました BME280モジュールはスイッチサイエンスや秋月で売ってます https://www.switch-science.com/catalog/2236/ https://akizukidenshi.com/catalog/g/gK-09421/ BME280はSPIとI2Cを選べるのですがI2Cで接続での使用です https://github.com/SWITCHSCIENCE/BME280 今回はここにあるスイッチサイエンスのPython用のサンプルコードを改変して MaixPyで使えるようにしてみました 気温、気圧、湿度をSerialに表示するだけのプログラムです 改変したコードはこちらです https://pastebin.com/QyV9qssY i2c_addressにはBME280のアドレスを入れます(デフォルトは0x76) M5StickVでもSCL=34 SDA=35もしくはSCL=35 SDA=34にすればおそらく使えると思います MaixduinoでMaixPyでATD7410の温度センサーモジュールを使ってみました 秋月で税込み500円で売ってます http://akizukidenshi.com/catalog/g/gM-06675/ 気温を5秒おきにシリアルに表示するだけのプログラムです https://pastebin.com/ButCuNtx M5StickVの人は74行目のscl=30, sda=31のところを scl=34, sda=35もしくはscl=35, sda=34に変更すれば使えると思われます 気温を5秒おきにLCDにも表示するバージョンです https://pastebin.com/QbbdwtU6 LCD表示バージョンはMaixシリーズでしか使えないと思われます 新しい仲間ができたようです UnitV AI Camera https://www.switch-science.com/catalog/6212/ 税込単価 2,145 円 > M5StickVとの大きな違いは液晶やバッテリー、ジャイロセンサが非搭載になり、 > 小型軽量になった点です。 > M5StickCと組み合わせることで、そのあたりを補完してお使いいただくことが可能です。 > > Sipeed社の協力により、K210用のMicroPython環境であるMaixPyで開発が可能です。 > カメラには高感度なOmniVision社製OV2640イメージセンサ(2メガピクセル)を搭載しています。 WiF使いたい場合はMAixduinoが一番安く上がるのかな? BME280はGroveタイプのもあるんですね GROVE - 温湿度・気圧センサ(BME280) https://www.switch-science.com/catalog/3374/ >>78 MaixPyからWiFi使うならMaixduinoがいいですね SPI接続ですし、安定して使えます ただし、ArduinoからはオンボードのWiFiは使えないです Arduinoから使う場合は外付けでESP8266をUARTでつなげば使えます Maixduinoで注意が必要なのはJTAG用のピンが出てない点です MaixBitならJTAG用のピンが出てるのでFT2232H MINI MODULEをつなぐことで PlatformIOでCやC++でデバッグができるようになります まあ、デバッグ機能は必要ない人も多いでしょうが あと、Maixduinoにアナログ入力ピンがありますが、これもArduinoからは使えません MaixPyでnetworkの中にアナログ入力ピンを使う機能があります networkの中にあるのはこのアナログ入力ピンはオンボードのESP32の機能だからだと思われます https://github.com/sipeed/MaixPy_scripts/blob/master/network/demo_esp32_read_adc.py >>80 ありがとう。 MaixPy使用予定だからMaixduinoにしておきます。 あと、MaixPyでWiFiの関数はこれだけです サーバの機能はありません version -- <function> adc -- <function> scan -- <function> connect -- <function> disconnect -- <function> isconnected -- <function> ifconfig -- <function> ping -- <function> サンプルはここです https://github.com/sipeed/MaixPy_scripts/tree/master/network demo_esp32と書かれてるのがMaixduino用のWiFiのサンプルプログラムです >>77 のUnitV AI CameraのカメラはOV2640か Maixduinoと同じやつだね M5StickVみたいにMaixPyのみでArduinoは使えないのかな? Googleで検索するともう手に入れて使ってる人いるのね K210搭載のモジュールはRAMが6MBもあるので MicroPythonやるなら最適だと思うけどね MicroPythonのMaixPyが使えるんだから >>83 ありがとう。 そこは見つけてた。 MAix Dockやbitのモジュールセットは技適の関係でおおっぴらに売れないだろうけど、もしかしたらってのがありました。 M5StackV+が出てくれば手っ取り早くて良いんですけどね。 MaixGo用のデモプログラムも少し改変すればMaixduinoで動きます 例えば、httpでjpgファイルをダウンロードするデモプログラム https://github.com/sipeed/MaixPy_scripts/blob/master/network/demo_http.py これは https://pastebin.com/EW33HAq2 こんな感じに改変すればMaixduinoでも動きます >>75 でBME280でのLCD表示版を作ってなかったので作りました おそらくMaixシリーズ専用になると思われます https://pastebin.com/6LDpPAPa これって在庫あるのかな? Sipeed Maixduino https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5JE6 【数量1個〜】単価 \4000 秋葉原が近いなら千石やマルツの2Fやラジオデパート3Fのshigezoneあたりに行ってみるとか? 千石とshigezone19時、マルツは20時に閉まっちゃうけど M5StackはK210ではなく、ESP32というマイコンを使用してます なのでこっちで扱ってるようです 格安wifiモジュール「esp8266」「esp32」 4個目 http://rio2016.5ch.net/test/read.cgi/denki/1574506387/l50 m5stack stickvはK210だからいいんじゃね Maixduinoなら東京ラジオデパート3FのShigezoneで3300円で売ってたよ Maix Goは売り切れってなってた sipeedは製造は深センでやってるのかな? だと品薄になりそう。 とりあえずMaix bitとMaixduinoは1台ずつ入手済みだから暫くは問題無いけど。 スイッチサイエンスでSipeed RISC-Vデバッガ売ってたんだね 安かったので買ってしまった やっぱりJTAGピンが外に出てないMaixduinoでは使えない模様 ESP32で使う方法を見つけたからいいけど 使ってるチップはFT2232Dで秋月のFT2232Dモジュールより安いね ESP32をいじってたらミスしてMaixduinoに載ってるESP32に書き込んでしまった Maixduino用のESP32のfirmware公開されてたんだね 自分でビルドしてesptool.pyで書き込んで復活しました firmwareはここ https://github.com/sipeed/Maixduino_esp32_fimware MaixduinoのArduinoのI2CのライブラリのWire.endTransmission()だけど Wire.endTransmission(false); とsendStopにfalseを指定してもきちんと働いてないようです 温度センサーモジュールのADT7410で、0x00以外のレジスタの値を読み出せない ESP32とArduino Pro miniの互換機で試したところ正常に読み出せました ライブラリのWire.cppを見てみたところ TwoWire::endTransmission(bool sendStop)から TwoWire::writeTransmission()とTwoWire::readTransmission()を呼び出してるようですが この2つの関数でsendStopが無視されてる模様 自己レスです kendryte-standalone-sdkのi2c_recv_dataを直接呼び出すことで解決しました インクルードファイルは #include <kendryte-standalone-sdk/lib/drivers/include/i2c.h> int i2c_recv_data(i2c_device_number_t i2c_num, const uint8_t *send_buf, size_t send_buf_len, uint8_t *receive_buf, size_t receive_buf_len) i2c_numがI2CのBus番号 WireがI2C_DEVICE_0、Wire1がI2C_DEVICE_1、Wire2がI2C_DEVICE_2で i2c_device_number_tでキャストしてあげないとエラーが出る send_bufにi2cデバイスの読み取りたいレジスタのアドレスを格納 send_buf_lenがsend_bufのデータの大きさ receive_bufで読み込むバッファを指定 receive_buf_lenでreceive_bufの大きさを指定 ATD7410のステータスレジスタを読み込む例はこんな感じ uint8_t status_reg; uint8_t reg_addr = 0x02; i2c_recv_data((i2c_device_number_t)I2C_DEVICE_0, ®_addr, 1, &status_reg, 1); Arduinoからi2c_recv_data()を使うときは特に初期は必要ないようです (おそらく、Wireのライブラリの方で初期化してる) レジスタの内容を読み込みたい時だけ直接i2c_recv_data()を呼び出せばいいようです 上の例ではプログラムの先の方で 同じI2Cデバイス宛てにWire.endTransmission()を呼んでたので 初期化しなくてもよかったようです I2Cデバイスへの初めての読み込みでi2c_recv_dataを使う場合や アドレスの違うI2Cデバイスへの読み込みでi2c_recv_dataを使う場合は 初期化をしてI2Cデバイスのアドレスを設定する必要があるようです 初期化は下記関数を使います i2c_init(i2c_device_number_t i2c_num, uint32_t slave_address, uint32_t address_width, uint32_t i2c_clk); ここで i2c_numがI2CのBus番号 WireがI2C_DEVICE_0、Wire1がI2C_DEVICE_1、Wire2がI2C_DEVICE_2で i2c_device_number_tでキャストしてあげないとエラーが出る slave_addressがI2Cデバイスのアドレス address_widthがI2Cデバイスのアドレス幅で7bitもしくは10bitどちらかを指定するようです i2c_clkがI2Cのクロック周波数です ADT7410のI2Cアドレスが0x48だとすると初期化設定例は i2c_init((i2c_device_number_t)I2C_DEVICE_0, 0x48, 7, Wire.getClock()); 中国の新型コロナ検出AIってK210かな? 学習はクラウド使ってそうだけど。 M5StickVとUNIT V Groveポートが2つあればよかったのに K210はFPIOAでピンの機能を自由に変更できるのがいいね MaixPyはSSLを使えないことを除けばかなり高機能なMicroPython実装だね 大容量のRAMを活かした仮想フレームバッファで画像を楽に扱えるのがかなりいい MicroPythonでグラフィックス扱うならMaixシリーズが一番いいみたい 本家MicroPythonやCircuitPythonのLCDライブラリはPythonで描画するので遅い MicroPython lobo版はMicroPython自体がLCDに対応してるので対応するLCDを使うと速いが MicroPython lobo版は直接LCDに描画するので仮想フレームバッファでイメージを扱えないし ESP32と比べてMaixシリーズはMicroPythonでは6倍くらい速い M5StickV手にいれたがセンサーのリセットでエラーが出る…ファーム書き換えたけど駄目だな MaixPyでLCD、LEDを制御することはできたから単にカメラの不良かな。 最初にレンズが転がってたのが関係あんのかなあ この手の製品は初期不良交換のみなので 初期不良ならすぐに購入したお店に連絡取った方がいいよ >>38 の部分で抜けてたのがあったので追記します Humblesoft_GFX.cppの 元ファイルの41行目を変更 textsize_x, textsize_y); の部分を下のように変更 textsize); 元ファイルの68行目を変更 textsize_x, textsize_y); の部分を下のように変更 textsize); 追記 41行目、68行目というのは>>38 の最後の部分を追記する前の行番号です 追記後の行番号は55行目、82行目になります あとは、MaixduinoのライブラリのSipeed_ST7789.hとSipeed_ST7789.cppを platformioのプロジェクトのsrcフォルダにコピーして名前を変更 >>38 の >LCDドライバのSipeed_ST7789.hとSipeed_ST7789.cppを名前を変えてコピーして >Adafruit_GFXからの継承ではなく、Humblesoft_GFXからの継承に改変 この部分は具体的に書くと下記のようになります Sipeed_ST7789.hをHumblesoft_Sipeed_ST7789.hへ Sipeed_ST7789.cppをHumblesoft_Sipeed_ST7789.cppへ Humblesoft_Sipeed_ST7789.hの下記部分を変更 6行目の #include <Adafruit_GFX.h> この部分を下記のように変更 #include <Humblesoft_GFX.h> 48行目の class Sipeed_ST7789 : public Adafruit_GFX{ この部分を下記のように変更 class Sipeed_ST7789 : public Humblesoft_GFX{ Humblesoft_Sipeed_ST7789.cppの下記部分を変更 この部分を #include "Sipeed_ST7789.h" #include "lcd.h" #include "sysctl.h" #include "utils.h" 下記のように変更 #include "Humblesoft_Sipeed_ST7789.h" #include <lcd.h> #include <sysctl.h> #include <utils.h> 8行目の :Adafruit_GFX(w,h), の部分を下記のように変更 :Humblesoft_GFX(w,h), 使用するファイルは下記のようになります 全部、PlatformIOのプロジェクトのsrcに置きます Bitmap.cpp Bitmap.h Humblesoft_GFX.h Humblesoft_GFX.cpp Fontx.h Fontx.cpp result.h uni2sjis.h uni2sjis.c uni2sjis_tbl.c Utf8Decoder.h Utf8Decoder.cpp Humblesoft_Sipeed_ST7789.h Humblesoft_Sipeed_ST7789.cpp main.cpp ピンが6本出てるからM5StickVより拡張性はあるっぽいね I2CとSPI SPIとUART I2CとUART なんて組み合わせが出来るんじゃない? Groveポートもあるのか I2C、UART、SPIの組み合わせも出来るね SPI-MODポートのIO6、IO7、IO8はESP8266と接続すること考えてそう (IO6がRX、IO7がTX、IO8がESP8266のEN接続用) Arduinoも使えればかなりいいね $24.9だから日本だと4000円くらいになっちゃうかもね Shigezoneで扱いがあれば安く買えるかも まだプレオーダーの段階なのでまだ先になるだろうけどね TTGO T-Watch K210 / K210 AIOT Watches Perform Face Detection with Kendryte K210 RISC-V Processor, ESP32 WiSoC https://www.cnx-software.com/2020/06/03/ttgo-t-watch-k210-k210-aiot-watches-perform-face-detection-with-kendryte-k210-risc-v-processor-esp32-wisoc/ https://www.cnx-software.com/wp-content/uploads/2020/06/T-Watch-K210-AIOT-Pinout.jpg AI Processor Kendryte K210 RISC-V Dualcore 64bit with FPU with 8MB SRAM Storage 16MB QSPI flash, MicroSD card socket Display I/F FPC connect for external display (not included) Camera 2MP OV2640 sensor Audio MAX98357A Audio codec; CVSD & SBC audio encoding Connectivity 2.4 GHz 802.11b/g/n WiFi 4 up to 150 Mbps, Bluetooth 4.2 BR/EDR and BLE Debugging USB-C port via CP2104 Expansion UART, SPI, I2C, PWM, I2S I2C grove connector I/O Voltage 3.3V / 1.8V operation Misc Power and boot buttons; RTC Power Supply -5V DC/1A DC input; AXP202 PMIC Dimensions & Weight TBD MaixduinoでオンボードのESP32をArduinoから使えたので報告します ライブラリはこれです https://github.com/arduino-libraries/WiFiNINA 上記ライブラリと、Maixduinoのframework-maixduinoを一部改変します framework-maixduinoの方は PlatformIOの方は C:\Users\ユーザ名\.platformio\packages\framework-maixduino\variants\sipeed_maixduino Arduino IDEの方は C:\Users\ユーザ名\AppData\Local\Arduino15\packages\Maixduino\hardware\k210\0.3.11\variants\sipeed_maixduino ここのpins_arduino.hを一部改変します 74行目の #define MD_PIN_MAP(fpio) (((fpio) < 17) ? _maixduino_pin_map[(fpio)] : (fpio)) static const uint8_t _maixduino_pin_map[17] = {4, 5, 21, 22, 23, 24, 32, 15, 14, 13, 12, 11, 10, 3, 31, 30, 16}; の部分を #define MD_PIN_MAP(fpio) (((fpio) < 22) ? _maixduino_pin_map[(fpio)] : (fpio)) static const uint8_t _maixduino_pin_map[22] = {4, 5, 21, 22, 23, 24, 32, 15, 14, 13, 12, 11, 10, 3, 31, 30, 16, 8, 9, 25, 6, 7}; に改変 続き WiFiNINAのライブラリの方は srcの中のutilityの中の52行の次の部分を static uint8_t SLAVESELECT = 10; // ss static uint8_t SLAVEREADY = 7; // handshake pin static uint8_t SLAVERESET = 5; // reset pin 次のようにします static uint8_t SLAVESELECT = 19; // ss pin 25 static uint8_t SLAVEREADY = 18; // pin 9 handshake pin static uint8_t SLAVERESET = 17; // pin 8reset pin static uint8_t NINA_GPIO0 = 18; // pin 9 #define PINS_COUNT 22 これだけです。 これでとりあえず、exampleのWiFiPingは成功しました (PlatformIOだと先頭に下記内容を追加する必要があります) #include <Arduino.h> void printWiFiData(); void printCurrentNet(); void printMacAddress(byte mac[]); exampleのWiFiWebClientもうまくいきました 他は試してないです 誤記がありました 改変するファイルのファイル名が抜けてました 正しくはこうです WiFiNINAのライブラリの方は srcの中のutilityの中のspi_drv.cppの52行の次の部分を static uint8_t SLAVESELECT = 10; // ss static uint8_t SLAVEREADY = 7; // handshake pin static uint8_t SLAVERESET = 5; // reset pin 次のようにします static uint8_t SLAVESELECT = 19; // ss pin 25 static uint8_t SLAVEREADY = 18; // pin 9 handshake pin static uint8_t SLAVERESET = 17; // pin 8reset pin static uint8_t NINA_GPIO0 = 18; // pin 9 #define PINS_COUNT 22 WiFiWebServerを試してみたところうまく動きませんでした NINA_GPIO0がHIGHになってないとSpiDrv::available()で1を返さないので WiFiServer.cppのWiFiServer::available()の中で呼ばれる server_drv.cppの中のServerDrv::availServer(_sock)が _sockの値を取得するまえにすぐに返ってきてしまいます NINA_GPIO0はIO32(Maixduinoの6番目のピン)に割り当てみます なので、srcの中のutilityの中の52行のspi_drv.cppの次の部分を static uint8_t SLAVESELECT = 10; // ss static uint8_t SLAVEREADY = 7; // handshake pin static uint8_t SLAVERESET = 5; // reset pin この部分はこうなります static uint8_t SLAVESELECT = 19; // ss pin 25 static uint8_t SLAVEREADY = 18; // pin 9 handshake pin static uint8_t SLAVERESET = 17; // pin 8reset pin static uint8_t NINA_GPIO0 = 6; // pin 32 #define PINS_COUNT 22 次にsrcのutilityの中のspi_drv.cppの563行目を下記のように変更してください int SpiDrv::available() { return (digitalRead(NINA_GPIO0) != LOW); } この部分を int SpiDrv::available() { // return (digitalRead(NINA_GPIO0) != LOW); return 1; } まとめると WiFiNINAのライブラリはここ https://github.com/arduino-libraries/WiFiNINA Maixduinoで使えるように 上記ライブラリと、Maixduinoのframework-maixduinoを一部改変します framework-maixduinoの方は PlatformIOの方は C:\Users\ユーザ名\.platformio\packages\framework-maixduino\variants\sipeed_maixduino Arduino IDEの方は C:\Users\ユーザ名\AppData\Local\Arduino15\packages\Maixduino\hardware\k210\0.3.11\variants\sipeed_maixduino ここのpins_arduino.hを一部改変します 74行目の #define MD_PIN_MAP(fpio) (((fpio) < 17) ? _maixduino_pin_map[(fpio)] : (fpio)) static const uint8_t _maixduino_pin_map[17] = {4, 5, 21, 22, 23, 24, 32, 15, 14, 13, 12, 11, 10, 3, 31, 30, 16}; の部分を #define MD_PIN_MAP(fpio) (((fpio) < 22) ? _maixduino_pin_map[(fpio)] : (fpio)) static const uint8_t _maixduino_pin_map[22] = {4, 5, 21, 22, 23, 24, 32, 15, 14, 13, 12, 11, 10, 3, 31, 30, 16, 8, 9, 25, 6, 7}; に改変 続き WiFiNINAのライブラリの方は下記のように改変します NINA_GPIO0はIO32(Maixduinoの6番目のピン)に割り当てありますが適当な使ってないピンを割り当ててください srcの中のutilityの中の52行のspi_drv.cppの次の部分を static uint8_t SLAVESELECT = 10; // ss static uint8_t SLAVEREADY = 7; // handshake pin static uint8_t SLAVERESET = 5; // reset pin この部分はこうなります static uint8_t SLAVESELECT = 19; // ss pin 25 static uint8_t SLAVEREADY = 18; // pin 9 handshake pin static uint8_t SLAVERESET = 17; // pin 8reset pin static uint8_t NINA_GPIO0 = 6; // pin 32 #define PINS_COUNT 22 次にsrcのutilityの中のspi_drv.cppの563行目を下記のように変更してください int SpiDrv::available() { return (digitalRead(NINA_GPIO0) != LOW); } この部分を int SpiDrv::available() { // return (digitalRead(NINA_GPIO0) != LOW); return 1; } https://github.com/arduino-libraries/WiFiNINA/blob/master/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino WiFiNINAのexampleのWiFiUdpNtpClientですが 129行目のsendNTPpacket関数の型がunsigned longなのにreturn文がないために Maixduinoでは暴走してしまいます。 unsigned longではなくvoidにします unsigned long sendNTPpacket(IPAddress& address) { これを void sendNTPpacket(IPAddress& address) { にします K210だとリッチすぎ、GD32VF103だとプアすぎ STM32F7とかSTM32F4クラスのRISC-Vマイコンが欲しい RISC-Vってあっちこっちから出てるけど、どのRISC-Vも同じコンパイラでコード生成できるもんなの? ArduinoやPlatformIO使う分には勝手にgccのツールチェインが入るから そのあたりは気にすることはないね >>138 こんなのもあるよ HiFive1 RevB http://akizukidenshi.com/catalog/g/gM-15014/ 1個 ¥6,600(税込) SparkFun RED-V Thing Plus - SiFive RISC-V FE310 SoC https://www.switch-science.com/catalog/5993/ 税込単価 4,043 円 >>141 ,142 コアの計算能力はともかくメモリが少ない。RAMが16KBや20KBじゃ8/16bitマイコン並みだし ROMも少ないしせっかくの32bitマイコンなのにマルチメディアデータを扱ったりするのが難しい マルチメディアデータ扱いたければそれこそK210でいいと思うけどな MaixbitならQVGAのLCDとカメラ付きで秋月で3000円で売ってる Sipeed Maixbit Suit http://akizukidenshi.com/catalog/g/gM-14471/ 1個 ¥3,000(税込) >>144 K210はRISC-Vお試しとしてはありなんだろうけど結構電気食いというかラズパイzeroくらい電気いるように見える 組み込み制御向けのハイパフォーマンスマイコン・・STMならSTM32F7とかSTM32F4クラス、ルネエレならRX600やRX700クラス というかこの辺と比較してみたい >>145 そこまで電気食わないよ 触っても全然熱くないというかほとんど温度上昇感じない Cortex-M7が視野に入ってるならK210を使ってもいいはず Cortex-M7を使ったTeensy 4.0なんてRaspberry Pi Zeroより速いんだから ちなみにMHzあたりの性能はK210よりCortex-M7の方が上 K210は64bitというだけでそこまでリッチなコアじゃないよ Arduino計測すると性能的にはクロックも高くてMHzあたりの性能も高いTeensy 4.0の方が上 ただ、MicroPythonで計算するとK210の方が性能出るんだよね Teensy 4.0はNXP iMXRT1062というマイコン使っててCPUコアはCortex-M7の600MHz Dhrystone 2.1の結果はこんな感じ Maixduino(K210 RISC-V RV64GC 400MHz) Dhrystone/s : 1338079.0 DMIPS : 761.5703 DMIPS/MHz : 1.903926 Teensy 4.0(iMXRT1062 Cortex-M7 600MHz) Dhrystone/s : 2690341.8 DMIPS : 1531.2133 DMIPS/MHz : 2.552022 >>146-178 サンキュ。そうでもないのか。ググると出てきたデータシートを見てみたら > 2.3 Power SuppliesSupply > Core 0.9V VDD 0.9V Max 2000mA とか書いてあったから結構食うのかと思った 買ってみるかなぁ・・・もっとも秋月は土日閉まっているから別のルートを考える必要があるが 買うのか STM32F7やRX700使うのかと思った MaixduinoはWiFiが使える代わりにJTAGの端子が出てないのでデバッガが使えない MaixbitならJTAGの端子は出てる MaixbitやMaixduinoならShigezoneでも売ってるよ https://www.shigezone.com/?product=maix-bit_set 5月30日から東京ラジオデパート3Fの店舗が再開してるらしい 土日は11:00からみたい 営業してるかどうか問い合わせてみたら? >>151 あくまで評価用だし RX72Nはすでに買っている STM32F7はどれにしようか迷い中 世の中ARMだらけだけどアセンブラも考慮するならRXは良くできていると思う K210について調べていたけどハードウェアマニュアル的な資料が見あたらない 割り込みやレジスタの使い方とか何処に書いてあるのだろうか。データシートも公式にはなさそうだし まさか初期のSPRESENSEみたいにSDKを調べろと? >>155 マジか。となるとSDKにない使い方は難しいわけか GD32VF103のマニュアルはそれなりに書いてあるようだ うーむ、難しい・・ GD32VF103を作ってるGigaDeviceはSTM32の互換チップ作ってるメーカーだったりする 互換チップが次々と生まれる中国、半導体業界の新たな潮流 https://eetimes.jp/ee/articles/2001/28/news032_2.html ArmとRISC-V、両輪で製品拡充を目指すGigaDevice https://eetimes.jp/ee/articles/2002/28/news077.html >>157 それは知っている。組み込みマイコンだからかフラッシュプログラマを作るための資料も用意されているようだ 個人的にGD32VF4とか出てきたらなかなかおもしろそう。ペリフェラルもいっぱいあるし GD32VF103にSRAM外付けも考えたけどバーストモードがないみたいで断念(STM32F103にはある) >>135-137 の内容をまとめてみました ArduinoでMaixduinoのオンボードWiFiを使う方法 https://pastebin.com/h1QxymDr Sipeed Maix Amigo is a Portable 64-bit RISC-V AI Development Kit with Display and Cameras https://www.cnx-software.com/2020/08/24/sipeed-maix-amigo-portable-64-bit-risc-v-ai-development-kit-display-cameras/ https://www.cnx-software.com/wp-content/uploads/2020/08/Sipeed-Maix-Amigo.jpg SoC Kendryte K210 Dual-core 64-bit RISC-V (RV64GC) processor with FPU @ 400 MHz (overclockable to 500MHz), 8MB SRAM, built-in AI accelerators for video and audio Storage 16MB Flash, MicroSD card slot up Display 3.5-inch TFT capacitive touch screen display with 480×320 resolution Camera VGA front-facing camera up to 30 fps (GC0328 sensor) VGA rear camera up to 60 fps (OV7740 sensor) Audio 6+1 microphone array USB 1x USB Type-C port for power and programming Expansion 3x Grove ports with I2C, GPIO, etc… 3x 8-pin SP-MOD headers with GPIOs, 3.3V, and GND signals; compatible with ESP-01 ESP8266 WiFi module, PSRAM modules, etc… Sensor Accelerometer Misc Reset button, 3x function buttons, 3x LEDs Battery 520 mAh Lithium battery Power Supply Via USB-C port Dimensions 104.3 x 63.3 x 16.5mm スイッチサイエンスでMaixcube売ってるんだな Maixcube https://www.switch-science.com/catalog/6407/ 税込単価 4,433 円 公開日 2020年8月24日 MaixduinoでArduinoでボードライブラリ0.3.11でカメラが使えない不具合について 別のスレでMaixduinoでカメラが使えないと指摘されたので 0.3.9と0.3.11のカメラのライブラリを比較したところ Camera.h 79行目 virtual void setRotation(uint8_t rotation) = 0; ここだけを中途半端にsetRotaionからsetRotationに修正してあってそれが原因でエラーが出てる模様 下記も修正するとうまくいく Sipeed_OV2640.h 60行目 virtual void setRotaion(uint8_t rotation); これを下記に修正 virtual void setRotation(uint8_t rotation); Sipeed_OV2640.cpp 724行目 void Sipeed_OV2640::setRotaion(uint8_t rotation) これを下記に修正 void Sipeed_OV2640::setRotation(uint8_t rotation) 新しいMaixduinoはカメラがGC0328に置き換わってるようです その場合はライブラリは下記のものに差し替える必要があるようです https://github.com/fukuen/Maixduino_GC0328 >>163 別スレでトラブっていた者です。 いろいろ試行錯誤したのですが、 結局のところライブラリ差替えだけではサンプルプログラムはまともには動かず、 結局OV2640のカメラを買って取り替えるはめになりました。 >>165 OV2640は単体で売ってるものなの? スイッチサイエンスでは取り扱いがあったようだけど、在庫0だし次回入荷も未定 Sipeed OV2640 カメラモジュール https://www.switch-science.com/catalog/5711/ Maixduinoでbusyboxが動作したのでその方法を書きます busyboxしか動作しないのでできることは限られます 全く実用的ではないです あくまでMaixduino上でLinuxが動くという実験になります MaixシリーズならMaixduino以外でも動作すると思われます Maixduinoでbusyboxを使う https://pastebin.com/uTtmnx71 busyboxでawkを追加できるので簡単なテストプログラムを用意してみました https://pastebin.com/qgEHT9m5 buildrootのbusyboxにプログラムを追加する https://pastebin.com/gXFxieJa 備考 ファイルシステムがRAMディスクなので Maixduinoを再起動するとMaixduinoで作成したファイルが全部消えるので要注意です 今度はArduinoでの話ですが MaixシリーズのArduinoではデフォルトのオプションでは double型の演算がソフトウェアエミュレーションで実行されることを確認しました whetstoneをArduinoで動くようにしてMaixduinoでも計測してみたのですが busyboxで計測したものと比べて MaixduinoのArduinoでは非常に遅い結果となりました PlatformIOでビルドしてできるfirmware.elfをobjdumpで 逆アセンブルして確認したのですが どうやらMaixシリーズのArduinoのデフォルトのオプションでは double型の演算はFPUの命令を使わずに、ソフトウェアエミュレーションで演算してるようです FPUの命令を使わずに浮動小数点演算のソフトウェアエミュレーションの関数を呼び出してます PlatformIOはplatformio.iniでbuild_flagsとbuild_unflagsを指定することで コンパイラオプションを指定できるのでFPU命令を使用するようにならないか試してみました K210のツールチェインのgccやg++ではデフォルトで --with-abi=lp64fと--with-arch=rv64imafcのオプションが付いてるようです つまり、ハードウェアでdouble型に対応しないRISC-V用のABIとアーキテクチャが指定されています rv64imafcは64bitRISC-Vで乗除算命令、atmic命令、単精度浮動小数点命令、縮小命令に対応してものになります K210は倍精度浮動小数点演算に対応しているので、rv64imafdcもしくはrv64gcが指定できるはずです lp64fは関数の呼び出しでfloat型のパラメーターや戻り値をFPUのレジスタで受け渡して double型のパラメーターや戻り値は整数レジスタで受け渡しをするABIです いろいろ試したところPlatformIOのplatformio.iniでオプションを 下のように指定するとコンパイラがFPU命令を生成するようになりました build_unflags = -march=rv64imafc build_flags = -mabi=lp64f -march=rv64gc objdumpの逆アセンブルで確認してdouble型のFPU命令が生成されていることを確認しました -mabi=lp64fの代わりに-mabi=lp64dも試してみましたが コンパイルかリンクでエラーが出てビルドが成功しませんでした また、デフォルトではサイズ優先最適化の-Osが付いているので 速度優先にしたい場合は-O2や-O3を指定して build_unflags = -Os -march=rv64imafc build_flags = -O2 -mabi=lp64f -march=rv64gc または build_unflags = -Os -march=rv64imafc build_flags = -O3 -mabi=lp64f -march=rv64gc のように指定した方がサイズは少し大きくなりますが実行速度は速くなります PlatformIOのplatformio.iniでオプションを build_unflags = -Os -march=rv64imafc build_flags = -O3 -mabi=lp64f -march=rv64gc このようにすることでWhetstoneの結果がかなり改善されました 下記のようにAruino IDEでコンパイラオプションを変更して Maixduinoでdhrystoneとwhetstoneを実行してみました (オプションを変更したら一度ソースファイルすべてを保存して保存日時を更新してください、 そうしないと再ビルドされないかもしれません) オプション変更前(-mabi=lp64f -march=rv64imafc -Os) dhrystone Microseconds for one run through Dhrystone: 1.5 Dhrystones per Second: 650801.5 whetstone Loops: 7000, Iterations: 1, Duration: 23.251999 sec. C Converted Double Precision Whetstones: 30.1 MIPS オプション変更後(-mabi=lp64f -march=rv64imafc -O2) dhrystone Microseconds for one run through Dhrystone: 0.8 Dhrystones per Second: 1279344.9 whetstone Loops: 50000, Iterations: 1, Duration: 23.533020 sec. C Converted Double Precision Whetstones: 212.5 MIPS 大幅に実行速度が速くなりました Arduino IDEでMaixシリーズのコンパイラオプションを変更する方法はこちらです (自己責任でお願いします) https://pastebin.com/E66j9e7f DhrystoneとWhetstoneのソースコードはこちらです Dhrystone Arduino互換機用Dhrystone 2.1のソースコード(PlatformIO IDE用) main.cpp https://pastebin.com/r4apdxaA mylib.cpp https://pastebin.com/MRkdRitB dhry.h https://pastebin.com/cwTrL2Ex dhry_1.c https://pastebin.com/n2AbNiRc dhry_2.c https://pastebin.com/TusHM9X6 Whetstone.cのArduino互換機用のソース(PlatformIO IDE用) main.cpp https://pastebin.com/AfdU9rbi mylib.cpp https://pastebin.com/LqFD9GBW whetstone.c https://pastebin.com/x6HFC051 ターミナル上で小文字の"s"キーを押すとスタートします Arduino IDEでもmain.cppを.inoファイルにすることで そのままで動作します 温度センサーのADT7410とADT7310のMaixシリーズ用のArduinoのスケッチです 以前、MaixPy用のみを投稿しててArduino用を投稿してなかったので今更ですが投稿します ADT7410はI2C、ADT7310はSPIで動作します ともに秋月で税込み500円で売ってます https://akizukidenshi.com/catalog/g/gM-06675/ https://akizukidenshi.com/catalog/g/gM-06708/ これらのスケッチは気温を5秒おきにシリアルとLCDに表示するだけのスケッチです MaixシリーズのArduino用のADT7410のスケッチ https://pastebin.com/w75GcEVf MaixduinoではSDA、SCLと書かれてるピン Maixduino以外の機種ではSDAが31番ピン、SCLが30番ピンです MaixシリーズではWire.endTransmission()のsendStopが無視されてしまうようで ADT7410の0x00以外のレジスタの値が読み込めませんでした 一部でkendryte-standalone-sdkのライブラリを直接使うことで ADT7410の0x00以外のレジスタの値を読み込んでます MaixduinoのArduino用のADT7310のスケッチ MaixシリーズのMaixduino以外の機種ではpinCSの値を変更してください https://pastebin.com/FCBqYfFq ADT7310はMaixduinoの IO21ピンにCS IO22ピンにMISO IO23ピンにSCK IO24ピンにMOSI を接続してみました Maix BitなどのMaixシリーズのMaixduino以外の機種は 21番ピンにCS 22番ピンにMISO 23番ピンにSCK 24番ピンにMOSI になると思います SPI.beginをパラメーター無しで呼び出すと デフォルトではK210のピン番号で MISOが26番ピン、SCKが27番ピン、MOSIが28番ピンCSは指定無しになりますが MaixduinoのピンソケットにはK210のそれらのピンが出てないため SPI.beginでパラメーターを指定して上のようにSPIのピンを Maixduinoのピンソケットに出てるピンに変更しました いつのまにか秋月でMaixduinoを扱いだしたようです Maixduino Suit Development Board https://akizukidenshi.com/catalog/g/gM-15550/ 1個 ¥4,100(税込) Sipeed MaixシリーズのArduino用でRISC-V RV64GC用の インラインアセンブラを使った簡単なプログラムを書いてみました MaixシリーズのLCDに簡単な図形を表示するプログラムです Maixduinoで動作確認しました Arduino IDE用です Sipeed MaixシリーズのArduino用のRISC-V RV64GCインラインアセンブラ デモプログラム https://pastebin.com/UTVk6LsY >>176 をPlatformIO IDE、Arduino IDEどちらでもビルドできるように修正しました Sipeed MaixシリーズのArduino用のRISC-V RV64GCインラインアセンブラ デモプログラム(PlatformIO IDE対応版) https://pastebin.com/Yih6K59b PlatformIO IDEでビルドする場合はplatformio.iniに 下記オプションのいずれかを指定してください build_unflags = -march=rv64imafc build_flags = -mabi=lp64f -march=rv64gc build_unflags = -Os -march=rv64imafc build_flags = -O2 -mabi=lp64f -march=rv64gc build_unflags = -Os -march=rv64imafc build_flags = -O3 -mabi=lp64f -march=rv64gc Arduino IDEでビルドする場合は下記のやり方でオプションを変更してください (オプション変更に関しては自己責任でお願いします) https://pastebin.com/E66j9e7f MaixシリーズのArduinoでBME280をI2Cで使ってみました SparkFunのBME280ライブラリがそのまま使えます SparkFunのBME280ライブラリはここにあります https://github.com/sparkfun/SparkFun_BME280_Arduino_Library 単にLCDとSeralに温度、湿度、気圧を表示するだけのものです BME280のサンプルスケッチ https://pastebin.com/bFk36iGX スケッチではBME280のI2Cアドレスは0x76にしてあります BME280のI2Cアドレスに合わせて変更してください ADT7410ではkendryte-standalone-sdkのI2Cのライブラリを 直接叩く必要がありましたが BME280は一般的なArduinoと全く同じやり方で扱えます たいていのI2CデバイスはBME280と同様に一般的なArduinoと同じ方法で使えると思います MaixduinoではSDA、SCLと書かれてるピン Maixduino以外の機種ではSDAが31番ピン、SCLが30番ピンです >>176 ,>>177 のプログラムでオプションを変更したくないという方のために RISC-Vのインライン アセンブラの命令を倍精度浮動小数点命令を使っていたところを すべて単精度浮動小数点命令にしたバージョンを作ってみました これならArduino IDEやPlatformIOでオプションを変更せずに デフォルトのオプションでビルドできます Sipeed MaixシリーズのArduino用のRISC-V RV64GCインラインアセンブラ デモプログラム(単精度浮動小数点版) https://pastebin.com/sKqhdLq1 >>176 ,177,179の修正版をつくりました プログラムがdummy_func01を呼ばないと動作しないという変な挙動を示していたのは アセンブラのプログラムが悪かったようです gccのインラインアセンブラの入力オペランドで割り当てられるレジスタが 関数呼び出しで保存されないレジスタだったため 関数呼び出しで破壊されてしまうのが原因の一つでした また、call擬似命令で暗黙的に使われるraレジスタを インラインアセンブラで破壊されるレジスタのリストに加えてなかったのがもう一つの原因でした これらが原因で変な挙動を示していたようです これらを修正したバージョンを作ってみました インラインアセンブラの入力オペランドに割り当てられるレジスタの内容は アセンブラプログラムの最初のところで スタックに確保したメモリに保存するようにしました また、インラインアセンブラの入力オペランドに指定した変数は 割り当てられたレジスタに値を戻してからインラインアセンブラを終了しないと インラインアセンブラの後に同じ関数内でその変数が使えないようなので (これもインラインアセンブラ内の関数呼び出しでレジスタの内容が破壊されるのが原因) アセンブラプログラムの最後に入力オペランドに割り当てられたレジスタに値を戻すようにしました そしてインラインアセンブラで破壊されるレジスタのリストにra (x1の別名)レジスタを追加しました >>176 ,>>177 これらの修正版はこちらです(Arduino IDEとPlatformIO IDEに対応してます) Sipeed MaixシリーズのArduino用のRISC-V RV64IMAFCインラインアセンブラ デモプログラム(単精度浮動小数点修正版) https://pastebin.com/LSG7pGwb こちらは倍精度浮動小数点命令を使用せず単精度浮動小数点命令のみなので Arduino IDEやPlatformIO IDEでオプションを変更しなくてもビルドできます >>179 の修正版はこちらです(こちらもArduino IDEとPlatformIO IDEに対応してます) Sipeed MaixシリーズのArduino用のRISC-V RV64GCインラインアセンブラ デモプログラム(倍精度浮動小数点修正版) https://pastebin.com/gvsybiG0 こちらは倍精度浮動小数点命令を使用するのでオプションの変更が必要です (Arduino IDE、PlatformIO IDEともにデフォルトのオプションが-march=rv64imafcなため アセンブラが倍精度浮動小数点命令でエラーを出すため。 -march=rv64imafdcもしくは-march=rv64gcを指定する) PlatformIO IDEでビルドする場合はplatformio.iniに 下記オプションのいずれかを指定してください build_unflags = -march=rv64imafc build_flags = -mabi=lp64f -march=rv64gc build_unflags = -Os -march=rv64imafc build_flags = -O2 -mabi=lp64f -march=rv64gc build_unflags = -Os -march=rv64imafc build_flags = -O3 -mabi=lp64f -march=rv64gc Arduino IDEでビルドする場合は下記のやり方でオプションを変更してください (オプション変更に関しては自己責任でお願いします) https://pastebin.com/E66j9e7f >>178 に関してですが Windowsの場合のArduino IDEのライブラリフォルダは下記になります メニューのツール→ライブラリの管理で入れるとカスタムライブラリに入ります カスタムライブラリ C:\Users\username\Documents\Arduino\libraries あらゆるボード用のライブラリ C:\Program Files (x86)\Arduino\libraries Maixシリーズ用のライブラリ C:\Users\username\AppData\Local\Arduino15\packages\Maixduino\hardware\k210\0.3.11\libraries usernameの部分は各自のユーザ名に読み替えてください M5 Stack Core2の話題ってここでいいの? >>186 M5Stack Core 2はESP32というマイコンモジュールを使ってるのでこっちでは? 格安wifiモジュール「esp8266」「esp32」 5個目 http://rio2016.5ch.net/test/read.cgi/denki/1594364030/ >>185 の追記 Microsoft StoreからArduino IDEを入れた人のMaixシリーズ用のライブラリはここ C:\Users\username\Documents\ArduinoData\packages\Maixduino\hardware\k210\0.3.11\libraries Microsoft StoreからArduino IDEを入れた人のコンパイラオプション変更のためのplatform.txtはここです (コンパイラオプション変更は自己責任でお願いします) C:\Users\username\Documents\ArduinoData\packages\Maixduino\hardware\k210\0.3.11\platform.txt IOエクスパンダのMCP23017をArduinoで使ってみました ICは秋月で110円で買えます https://akizukidenshi.com/catalog/g/gI-09486/ ボードはスイッチサイエンスで990円で買えます https://www.switch-science.com/catalog/1650/ MCP23017はI2Cで制御します。 接続はMaixduinoではSDA、SCLと書かれてるピン Maixduino以外の機種ではSDAが31番ピン、SCLが30番ピンです https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library AdafruitのMCP23017用のライブラリを一部修正することで Maixシリーズでそのまま使えます Adafruit_MCP23017.cppの25行目から30行目を変更する #ifdef __AVR #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> #endif #include "Adafruit_MCP23017.h" この部分を下記のように修正する #ifdef __AVR #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> //#endif #elif defined(K210) #include <avr/pgmspace.h> #endif #include "Adafruit_MCP23017.h" Adafruitのこのライブラリを使うことで ArduinoのdigitalWriteやdigitalReadのような関数で操作できます。 Adafruitのライブラリを使ったMaixシリーズのMCP23017用の簡単なLチカです GPA0とGPB0にLED、GPA7にタクトスイッチを接続してあることを想定してます アドレスは0x21になってますが自分の設定に合わせて変更してください https://pastebin.com/iaHfktTf ライブラリは上記URLからダウンロードできます。 緑色のCodeと書かれてる部分をクリックすると 一番下に「Download ZIP」と出てくるのでそれをダウンロードすればいいです 上記のように修正して手動で下記フォルダにフォルダごとコピーしてください。 C:\Users\username\Documents\Arduino\libraries (usernameの部分は自分のユーザ名に読み替えてください) ライブラリはArduino IDEの「ツール」→「ライブラリ」の管理からも入れられます Adafruit MCP23017 Arduino Libraryを検索してください。 その場合、ライブラリは下記フォルダに入ります 上記のようにそれを修正します C:\Users\username\Documents\Arduino\libraries (usernameの部分は自分のユーザ名に読み替えてください) 16ch、12bitのPWMコントローラーのPCA9685をArduinoで使ってみました 秋月やスイッチサイエンスでモジュールキットが購入できます I2C接続16チャンネル サーボ&PWM駆動キット https://akizukidenshi.com/catalog/g/gK-10350/ PCA9685搭載16チャネル PWM/サーボ ドライバー (I2C接続) https://www.switch-science.com/catalog/961/ https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library ここのAdafruitのPCA9685用のライブラリがそのまま使えます MaixduinoはSDA、SCLと書かれてるピンに接続 Maixduino以外では31ピンにSDA、30ピンにSCLを接続します 簡単なLチカのデモプログラムを作ってみました 全チャンネルにLEDがシンク接続されていることを想定しています (setPWMが使いにくいのでデューティ比で指定できる関数を作ってみました) PCA9685のI2Cアドレスは0x40に設定されているので自分のものに合わせて変更してください https://pastebin.com/Ceq6EjTW このようにMaixシリーズでも簡単にI2Cデバイスが使えます ADT7410のようなkendryte-standalone-sdkを 使わないといけなくなるケースはまれなケースのようです。 I2CデバイスはSCL、SDAとGND、電源を接続するだけで扱えるのが便利ですね MaixduinoのオンボードのESP32に間違ってESP32のArduinoのスケッチなどを書き込んでしまった場合 下記のサイトからMaixduinoのESP32用のファームウエアをダウンロードできます 書き込み方法も書かれてますので参照してください https://github.com/sipeed/Maixduino_esp32_fimware/releases m5stackについて質問したいけど、誘導していただけませんか? RISC-Vが過疎ってるからって関係ない板にまでコピペしまくるなよな。 ここは別にRISC-Vのスレじゃないぞ K210のスレ K210がRISC-Vコアを使ってるというだけ SipeedやM5Stackの話が出るのはわかるが全然関係ないこと書き込まないで ESP8266とPin互換のマイコンがespressifから出るから もう少ししたらRISC-Vマイコンのスレ立てた方がいいかな SipeedからもDebianが走るAllwinnerのRISC-VのSoC載ったボード出るようだし >>201 踏み台になれ ttps://www.espressif.com/sites/default/files/Screenshot%202020-11-27%20at%2009.10.15.png GD32VF103もあるしRISC-Vスレがないのが不思議 粘着MIPS君といい、キチガイRISC-V厨といい他の板で暴れる馬鹿はなんだろうな。 ここでやればいいのに。 MaixシリーズのArduinoでインラインアセンブラではなく アセンブラソースファイルを含むプログラムを ビルドできるか試してみました 結論から言うとMaixシリーズのArduinoではArduino IDEでビルドをしても アセンブラソースファイルがアセンブルされないようでビルドに失敗しました MaixシリーズのArduinoではPlatform IO IDEを使うと アセンブラソースファイルを含むプログラムをビルドできます アセンブラソースファイルはmain.cppと同じsrcフォルダに入れるだけでアセンブルされます 以下はPlatform IO IDEのArduino用のアセンブラデモプログラムです 以前の>>181 、>>182 のインラインアセンブラで書いたものを少し変更しただけのものです 関数の中の大部分をアセンブラで書く場合はその関数だけ別ソースファイルに分けて 関数全体をアセンブラで書いた方が場合によってはインラインアセンブラを使うよりも簡単かもしれません Sipeed MaixシリーズのArduino用のRISC-V RV64IMAFCアセンブラ デモプログラム(単精度浮動小数点版) Platform IOでArduinoのプロジェクトを作成して main.cpp、asm_int32_float32.sをsrcフォルダに置いてビルドするだけです main.cpp https://pastebin.com/fdWr2QJp asm_int32_float32.s https://pastebin.com/nw4KyE8B Sipeed MaixシリーズのArduino用のRISC-V RV64GCアセンブラ デモプログラム(倍精度浮動小数点版) Platform IOでArduinoのプロジェクトを作成して main.cpp、asm_int32_double.sをsrcフォルダに置いてビルドするだけです main.cpp https://pastebin.com/hRK8jmss asm_int32_double.s https://pastebin.com/4La0G7XY 注意:倍精度浮動小数点命令を使うプログラムをビルドする場合は platformio.iniに下記オプションのいずれかを指定してください デフォルトのオプションが-march=rv64imafcなので 倍精度浮動小数点命令を使うとエラーが出てビルドできません build_unflags = -march=rv64imafc build_flags = -mabi=lp64f -march=rv64gc build_unflags = -Os -march=rv64imafc build_flags = -O2 -mabi=lp64f -march=rv64gc build_unflags = -Os -march=rv64imafc build_flags = -O3 -mabi=lp64f -march=rv64gc ろくに遊ぶ前にstickV電源入らなくなった 鞄に入れたまま玄関置きっぱが悪かったか? 最近氷点下続いてたし >>208 >結論から言うとMaixシリーズのArduinoではArduino IDEでビルドをしても >アセンブラソースファイルがアセンブルされないようでビルドに失敗しました アセンブラソースファイルの拡張子を.s(小文字のs)ではなくて .S(大文字のS)にしたら正常にビルドできました IDEのEclipseもアセンブラの拡張子は大文字の.Sじゃないとアセンブルしてくれないね Maix BitでSipeed RISC-Vデバッガーを使ってデバッグを試したけど 安定しなくてステップ実行するとMaix Bitがすぐフリーズする やっぱり、デバッガはつかえないが無線LANが使えるMaixduinoの方がいいね >>159 の方法でArduinoでMaixduinoのオンボードのWiFi使えるし Maixduinoの液晶が壊れたけど、また同じの買うしかないのかな? 液晶目的だけならMaixbit買った方がやすいかな 新チップきたな 世界に先駆けて、64ビットRISC-V CPUコア搭載の汎用MPU「RZ/Five」を発表 | Renesas ttps://www.renesas.com/jp/ja/about/press-room/renesas-pioneers-risc-v-technology-rzfive-general-purpose-mpus-based-64-bit-risc-v-cpu-core シナ製品はシナの中だけで使ってろ。 露中の侵略を応援する気はない。 >>220 うーん・・・チャイナで今現在進行中の方々への侵略行為は許しがたい暴挙だけれど、 今回のウクライナに限ればロシア側にまったく道理が無いというわけでもないらしくてなぁ・・・ ぼくはゆーちゅーぶで、「ウクライナ・オン・ファイヤー 日本語字幕(字幕改正版)」てのを 見て、状況への評価が、だいぶ変わりましたぞ。 第三次世界大戦を起こしたい側がウクライナ問題を煽っているから M5StickV MaixPy MicroPython serial 接続で遊んでたら急に文字化けが増えて 可笑しくなって数十分後に勝手に切断された 再起動しても USB が不明なデバイスになってしまった PC 再起動したら治るんかこれ https://www.youtube.com/watch?v=BVaC_OXGt9k >>221 オリバーストーンって名手だろ。 そんな人の映像を見て考え方変えているようじゃまずいのでは。 どうすれば見る人が考え方を変えるかをよく知ってる人だよ。 JDSC AIの活用で、この国は変えられる、(株)JDSC/4418 テンバガー候補 https://jdsc.ai/news/ シニアマーケティングのゆこゆこ、DM等による販促サポートサービスへ JDSCのAIを導入CVRが平均2.4倍 長野県松本市 電力データとAIによるフレイル検知の実証を開始/中部電力 //dime.jp/genre/1380420/ AIであれば知床半島観光船事故の出航判断を誤ることはなかったかもしれない 2022.05.08 @DIME https://jimin.jp-east-2.storage.api.nifcloud.com/pdf/news/policy/203427_1.pdf デジタル・ニッポン 2022~デジタルによる新しい資本主義への挑戦~ !! 自民党デジタル社会推進本部 //www.smbcnikko.co.jp/products/inv/toshin_lab/column/002.html AI通信 投資対象として「AI」をどう見るか? AI関連企業の成長物語はまだ始まったばかり 官民の積極的な取り組みが加速する 日興 //www.meti.go.jp/policy/it_policy/jinzai/AIutilization.html 中小企業のDXに役立つ「手引き」と「AI導入ガイドブック」0408 経産省 //www.riken.jp/research/labs/aip/#h2Anchor1220421 理研 革新知能統合研究センター 革新的な人工知能基盤技術を開発し、それらを応用する //special.nikkeibp.co.jp/atclh/NXT/22/laboro_ai0428/ 中長期的に企業価値を高めることに貢献する 株Laboro.AI 日経BP //cloud.watch.impress.co.jp/docs/special/1405135.html AIにとっては必然のもの? 東芝が推進するMLOps活用の取り組み 大河原克行 0502 機械学習を活用したシステムを開発して運用を開始したあとも、継続的にモニタリングを行い、システム運用や市場環境の変化を通じて再学習や改良、改善を実施し、品質を保つ //www.okinawatimes.co.jp/articles/-/953511 InnodiskがエッジAIコンピューティング市場に焦点を当てた新ビジネスを発表 220505 沖縄タイムス //www.nikkei.com/article/DGXZQOUC186WY0Y2A410C2000000/ 熟練者の技をデジタル化 ALGO ARTIS 220503 //www.jcer.or.jp/economic-forecast/2021127.html DX社会の構築なければ、30年代はマイナス成長に 日本経済研究センタ //www.nikkei.com/article/DGXZQOUC130YI0T10C22A3000000/ ソフトバンク、全社員1.8万人にAI・統計スキル習得求める 0327 //www.nikkei.com/article/DGXZQOUC11C8C0R10C22A4000000/ デジタル人材の育成 日本は7カ国平均の29%を大幅に下回った AWS調査 0419 全員応援系でも連続ならそれぐらいの力なんだろ、オレたちは社会問題にされなくて本人の為やろ >>216 ハマるきっかけは最初の炎上ネタに釣られたガーシー 明確に書いても変異するまで痩せないと思うが iPhoneとも手を出そうとした印象で解答するのが多かったの見たいだけど 元文関係なくサッサと仕事しそうやな Joji一択やんガイジなのがトラックに追い越されようとするときそれを顔に塗ったら さすがに下で寄ってたかってマジレスしてんだろ read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる