スキップしてメイン コンテンツに移動

投稿

Arduino on Wemos R1 D32(ESP32)にセンサーシールドを載せジョイスティックを接続しSG90サーボを動かす

表題の通りなんですが、ジョイスティックはArduinoスターターキットについていた5v対応のものだったので、Wemos R3 D32 ( ESP32 ) ではどのように結線するのかよくわかっていませんでした。そこでネットでしらべたところ、ESP32のADCは3.3vなので、VCCは5vではなく3v3につなげ、X, Y のアナログ接続はESP32のADC2(A0, A1)ではなくADC1(A2=GPIO35, A3=GPIO34)に接続すると良いようでした。 結果、Joystickの中央値(センターポジション)に偏りがあるものの、それらしく動作してくれたので備忘録として挙げてみることにしました。なおSG90はセンサーシールドのD2,D3(GPIO 26、25)に接続しているので5Vで駆動させています。 スケッチは以下の通りです。初めの方にピン番号を defineし差分を吸収したので、ESP32以外でも同じコードで動作できるようにしています。 #ifdef ESP32 #include <ESP32Servo.h> #define D0 3 #define D1 1 #define D2 26 #define D3 25 #define D4 17 #define D5 16 #define D6 27 #define D7 14 #define D8 12 #define D9 13 #define D10 5 #define D11 23 #define D12 19 #define D13 18 #define A0 2 #define A1 4 #define A2 35 #define A3 34 #define A4 36 #define A5 39 #define MY_SERVO_X_PIN D2 #define MY_SERVO_Y_PIN D3 #define JOY_X_PIN A2 #define JOY_Y_PIN A3 #define JOY_SW D13 #define JOY_MAX 4096 #else #include <Servo.h> #define D0 0 #define D1 1 #define D2 2 #define D3 3 #de...

Windows 11 ( 23H2 ) に WSL2 Debian をインストール

特に目新しいことではないのですが、2023/12現在での備忘録として挙げてみることにしました。 まずターミナルを管理者で開きます。つづいて以下のようにします。 PS C:\Users\UserName> wsl --install -d Debian インストール中: 仮想マシン プラットフォーム 仮想マシン プラットフォーム はインストールされました。 インストール中: Linux 用 Windows サブシステム Linux 用 Windows サブシステム はインストールされました。 インストール中: Debian GNU/Linux Debian GNU/Linux はインストールされました。 要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。 ここで再起動し、再起動後、スタート->すべてのアプリからDeianをクリックしてWSL2を起動し 、ユーザー名とパスワードを入力すればOKです。 Windows11でのWSLインストールはデフォルトでWSL2がインストールされ、仮想マシンプラットフォームやサブシステムもコマンド一発でインストールされるので、非常に簡単ですね。 今回は以上です。それでは。

STM32F412RET6用にmicropython v1.21.0 をコンパイル

WeACT社のstm32関連ボードにSTM32f412RET6が載ったボードがあるのですが、バイナリーが古そうなので2023/11現在での最新バージョンv.1.21.0でビルドしてみました。まず、micropythonとWeACT社のgithubから該当ボードのレポジトリをcloneしました。 mkdir -p ~/stm32 cd ~/stm32 git clone https://github.com/WeActStudio/WeActStudio.STM32F4_64Pin_CoreBoard mkdir micropython cd micropython git clone https://github.com/micropython/micropython -b v1.21.0 micropython-v1.21.0 cd micropython-v1.21.0 git submodule update --init cp -a ~/stm32/WeActStudio.STM32F4_64Pin_CoreBoard/Examples/STM32F412/mpy/WeActStudio_F412RE ports/stm32/boards/ ざっと眺めると、linkerスクリプト(ports/stm32/boards/stm32f412rx.ld)が現在のmicropythonのレポジトリにないので、まずそこから手をつけました。内容は以下の通りです。 /* GNU linker script for STM32F412rx (512KB flash, 256kB RAM) */ /* Specify the memory areas */ MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* entire flash */ FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */ FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1,2,3 = 16K:sector 4 = 64K. 16...

F4VE BLACK / BLACK_F407VE ( STM32F407VET6 ) 用にmicropython v1.21.0 をコンパイル

STM32F407VET6が載ったボードでF4VE BLACK/BLACK_F407VEというのがあり、micropython 向けのportもあるのですが、そのままでは2023/11現在最新の v1.21.0 ではコンパイルできませんでした。しかし少し手を入れるとビルドできたので備忘録として挙げてみることにしました。 まず、portをcloneします。 mkdir -p ~/stm32/micropython cd ~/stm32/micropython git clone https://github.com/mcauser/BLACK_F407VE つづいてmicropythonをcloneしておきます。 git clone https://github.com/micropython/micropython.git -b v1.21.0 micropython-v1.21.0 cd micropython-v1.21.0 git submodule update --init cd mpy-cross make -j6 cd .. cp -a ../BLACK_F407VE ports/stm32/boards/ 次に、一部修正が必要なので編集します。 boards/BLACK_F407VE/mpconfigboard.mk 変更前 9 MICROPY_PY_USSL = 1 変更後 9 MICROPY_PY_SSL = 1 変更はここだけです。つづいてビルドしますが、v1.21.0をWSL2/Debian 12.1でビルドするとリンク時にエラーがでました。 ../../lib/mbedtls/library/ssl_tls.c:3328:5: error: 'mbedtls_sha512_finish_ret' accessing 64 bytes in a region of size 48 [-Werror=stringop-overflow=] なのでビルド時に、CFLAGを追加してmakeします。 cd ports/stm32 CFLAGS="-Wno-stringop-overflow" make DEBUG=0 LTO=1 BOARD=BLACK_F407VE CROSS_COMPILE...

STM32F401CCU6 + MicroPython 2機 でI2C通信テストを行う

前回はSTM32F401CCU6にMicroPythonを載せ簡易動作させましたが、今回は同じボードを2枚用意して片方をMasterにもう一方をSlaveにしてI2C通信を行ってみました。 なお結線ですが、SCLがB6, SDAがB7、どちらも5vトレラントのピンなので、2kΩで5vにプルアップしています。 まず、マスターからスレーブにデータを転送する例です。 スレーブ側 from pyb import I2C SLAVE_ADDR = 0x40 BAUD = 100000 i2c_slave = I2C(1, I2C.SLAVE, addr=SLAVE_ADDR, baudrate=BAUD) この状態ではslaveはscanにも反応しないので以下のようにして待ち受けさせます。 while True: try: data = i2c_slave.recv(4) except OSError as exc: if exc.args[0] == 5: # 5 == EIO ( bus scan ) print("I2C bus scan detected") elif exc.args[0] == 110: # 110 == ETIMEOUT pass else: print(exc) except KeyboardInterrupt: break else: print("RECV: %r" % data) 続いてマスター側です。 from pyb import I2C SLAVE_ADDR = 0x40 BAUD = 100000 i2c_master = I2C(1, I2C.MASTER, baudrate=BAUD) i2c_master.scan() for i in range(63): i2c_master.send("%04i" % i, addr=SLAVE_ADDR) pyb.delay(100) 成功...

STM32F401CCU6 + 64Mbit SPI Flash に micropython をWSL2/Debian12でコンパイルしインストール

表題の通りなのですが、STM32F401CCU6 に 64Mbit(8MByte) SPI FLASHを載せてmicropythonをWSL2(Debian12)でコンパイルしインストールしてみました。 sudo apt-get install git build-essential binutils-arm-none-eabi gcc-arm-none-eabi cd ~ mkdir stm32 cd stm32 git clone https://github.com/micropython/micropython.git -b v1.21.0 micropython-v1.21.0 cd micropython-v1.21.0 git submodule update --init cd mpy-cross make -j6 cd ../ports/stm32/boards git clone https://github.com/xreef/stm32f401cc_micropython_firmware cp -a stm32f401cc_micropython_firmware/WeAct_F401CC WeAct_F401CC cd .. # mpconfigboard.hをバックアップ cp -a boards/WeAct_F401CC/mpconfigboard.h boards/WeAct_F401CC/mpconfigboard.h.orig 以下をboards/WeAct_F401CC/WeAct_F401CC-mpconfigboard_h.patchとして保存します。 --- boards/WeAct_F401CC/mpconfigboard.h.orig 2023-11-15 06:20:45.685061505 +0900 +++ boards/WeAct_F401CC/mpconfigboard.h 2023-11-15 07:02:50.005053685 +0900 @@ -5,7 +5,7 @@ /* BOARD Ver 2.0 set 1 ,other set 0 like V1.3 V2.1+ */ #define VERSION_V20 (0) -#define USE...

STM32F407VET6上のFreeRTOSでccmramを全てheapに割り当てる

STM32F407VET6の場合、トータルでRAMは192kbなのですがこの内64kbがccmram(Core Coupled Memory RAM)で残りのsram128kbと分離していて、何もしない場合SRAMしか使いません。そこでccmram全部をheapに割り当て、他はSRAMを使うようにしてみました。とはいっても非常に簡単にできます。 まず、FreeRTOSConfig.hでconfigAPPLICATION_ALLOCATED_HEAP を 1 にします。 FreeRTOSConfig.h #define configAPPLICATION_ALLOCATED_HEAP 1 続いてmain.cで以下のようにします。 /* USER CODE BEGIN PV */ #ifdef configAPPLICATION_ALLOCATED_HEAP uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] __attribute__((section(".ccmram"))); #endif /* USER CODE END PV */ 基本的にはこれだけです。ビルド後、以下のようになっていればOKです。 ccramがすべてheapに割り当てられているのでUSAGEが100%になっていますが、正常です。簡単ですが備忘録として挙げてみました。今回は以上です。それでは。