ラズパイPico WのRust

ラズパイPico WのLチカが動かないなと思って、専用のファームがあるのかとも思ったけど、そんな理屈はない。MicroPythonはインタプリタだから実行環境必要だけど、Rustは実行ファイルになっているからそのまま実行出来るはず。

で実はHALがPicoとは別物(embassy)で、オンボードのLEDは無線モジュールから出力されている。MycroPythonやArduino IDEではPico/Pico Wのハードの違いを開発環境側で吸収しているんだろう。

この辺の記述は以下のリンクが参考になります。

https://qiita.com/Azi/items/422c654bb476e0abf118

LEDブリンクのソースコードは、

https://github.com/embassy-rs/embassy/blob/main/examples/rp/src/bin/wifi_blinky.rs

になります。Pico W用のHALは今現在も活発にアップデートされているので、安定的に使えるようになるのは今少し時間が必要です。それまではMycroPython/Arduino IDE/VS code環境で使うのが良さそうです。

 

admin

ラズパイpicoのデバッグ方法

USBインターフェースを本来の目的に使ってしまうと、USB経由のシリアルデバッグはできなくなるので、C/C++に限定されますが以下のやり方がありそうです。

① もう一枚picoを用意してデバッガーにする、ただし接続の取り回しに苦労しそう

② スイッチサイエンスで販売されているデバッグプローブを使う、論理的には搭載CPUも同じだからほぼ互換だろうと思う

https://www.switch-science.com/products/8708

恐らくこちらの方が使いやすい。接続インターフェースはSWDと言われる2ピンのインターフェース(GND必要だから実質3ピン)が、下の右センター付近にシールドで引き出されているからここに接続すれば良いはず。

SWDというのはJTAGが4ピン使うので小型のターゲットでは使いずらいのでARMが独自に設定した独自のプロトコルだそうです。バウンダリースキャンはできずに単純にデータの書き込みと読み出しに限定された機能です。

デバッグプローブ(picoprobe)ができることは、

https://github.com/raspberrypi/picoprobe

使い方は、

https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf

セットアップしようとしましたが、Javaが必要と言われてJavaをインストールしても見つからない?と言われる。

 

admin

syntax sugarはなぜsugarなのか?

今更ながらですが、wikipediaでは以下のように説明されています。

つまりまわりくどい表現を人間にとって分かりやすい(より心地よい : sweeter)表現に置き換えてくれるからと読めば良いようですから、それは説明として分かりやすいと思いました。

 

admin

ラズパイPico W(Thonnyで)

ラズパイpicoを動かす環境には、

・Arduino IDE(Arduino言語)

・VScodeにPlatformIO(C言語)

gccを使うので、Arduino/M5StackのようなPlatformIOとの組み合わせでは無いですね。

https://qiita.com/n0bisuke/items/f4ff96bd74932c8def77

・Thonny(MicroPython)

が有力どころですが、以下を参考にThonny(4.1.2)、MacBook Airで動かしてみます。

https://krr910183393.wordpress.com/2021/02/15/raspberry-pi-pico-micropython-thonny-python-ide/

Thonnyのインストールは完了している前提で、

① シリアルポートを選択します

Thonnyの右下でインタプリタをインストールして、ファイルから切り離された状態で以下のように見えるはずなのでシリアルポートでラズパイpicoを選択する。シェル画面端のように接続状態になります。

Note : この時にはUSBシリアルで見えていなければならないので外部ファイルモードでは選択できません。Thonnyでは外部ファイルモードを使うのはMicroPythonのUF2ファイルを書き込むときだけです。

このように接続されています。

② サンプルコードを入力します(PICO本体搭載LEDの0.5秒毎ブリンク)

③ 緑矢印をクリックすると起動、停止させるには赤stopアイコンをクリック

ただしこの状態ではpicoにテンポラリーに保存されているだけのようなので、電源オンで自動起動させるためには次のステップが必要

④ 電源オンで自動起動させるには、『ファイル』『名前をつけて保存』でRaspberry Pi Picoにmain.pyの名前で保存すれば自動起動

ただしパソコンのUSB経由でファイルに見えている状態では、そちらが優先されます。コードの書き換え考えたら妥当な仕様ですが。

P.S. (2023/9/5)

Thonny(MicroPython)の実行環境からArduino IDEを使ってしまうと、再度Thonnyを使うときには再度MicroPythonの実行環境をインストールしないといけません。

 

admin

ラズパイPico W(Arduino IDEで)

タイトル通りですが、picoをArduino IDEで使ってみました。

参考は以下のサイトですが、微妙にUIは異なるので想像力を駆使してセットアップ。

https://logikara.blog/raspi-pico-arduinoide/#mokuji_4

ポイントはボード追加とシリアルポートの設定だろうと思います。ボードはリンクの通りのURLから設定すれば良くて、シリアルポートの設定はUF2 Boardを選択します。

白ボタン押しUSBコネクタ挿入で外部ファイルと認識できれば、サンプルプログラムをシリアルで送信、送信完了すると切り離されてプログラムが自動スタートします。

 

Thonnyでうまく点灯しなかったLEDの動作が確認できました。

 

admin

 

Macのメールでoutlookのalias使っている時、

迷惑メール対策でaliasアドレス使っているときには、デフォルトではメールアドレスは元のアドレスになります。そこがAppleメールアドレスのalias使う時との違い。何が困ったかというとAmazonの返品処理で出店者からのメールの返信にはAmazon登録のアドレスと一致したメールアドレスでないと送信できないこと。

対策は、

Macのメールで「メール」 – 「設定」でメールアドレス部分を書き換え。複数のalias使っているといちいち面倒ですが、Macのメールはicloudメール優先だろうから他には回避方法がなさそうです。

 

admin

 

 

 

ラズパイPico W

今までどう使うかイマイチだったが、Rustで動かそうと思って初めて買ってみた。ピンヘッダーは付いていないから半田付けしてGroveアダプタに差し込んだところ。

動作確認はオンボードのLEDがRustでうまく点灯しないから、USBシリアル経由でメッセージを繰り返し送信するCのサンプルプログラムをビルドしてあるものを書き込んで確認。ビルドファイルがあるので、そのままPICOに書き込めば動くようになっている。

https://nkon.github.io/RasPico-Rust/

の情報から、

https://github.com/raspberrypi/pico-examples

のhello_usbからuf2ファイルをダウンロードしています。

こんな感じでメッセージを繰り返し送信します。

P.S. (2023/8/29)

Rustでうまく点灯できないのは、LEDのポートがbaisc PicoからPico Wで変わっているからでした。

 

admin

 

Fusion360でApple siliconがnative supportに

タイトル通りですが、認証方法の変更方法のメールと共に久々立ち上げたら、更新が入っていて更新後は、

とnative supportにようやくなりました。

AutoDeskからのリリースは、

https://www.autodesk.co.jp/support/technical/article/caas/sfdcarticles/sfdcarticles/JPN/Is-Fusion-360-supported-on-Apple-M1-System-Architecture.html

になります。速度は体感変わりないけど、ベンチマークしたら高速化されてるんだろうと思って以下を見ると、

https://www.autodesk.com/products/fusion-360/blog/running-fusion-360-on-apple-silicon-faq/#Will_I_see_any_performance_benefits

性能は3割改善していて、電池寿命にも貢献があると。いつもACアダプタ使用だから電池寿命は取り敢えず参考ぐらい。

 

admin

大和魂

本居宣長の言う大和魂というのは、維新の志士そして旧日本軍の精神につながっていると思いますが、宣長の言う大和魂は決してナショナリズムではなくナショナリティのことを言っているだけだろうと思う。したがってそれを都合よくナショナリズムに解釈するのは間違っている。漢意(からごころ)は本来の日本人の精神とは違うから大和魂を大切にするのは、宣長が決して儒教を知らなかった訳ではないから、守破離の結果として大和魂に行き着いたという風に解釈すべきだろう。

 

admin

Rustで特徴的と思ったところ(その1)

Rustのオンラインブック、

https://doc.rust-jp.rs/book-ja/title-page.html

を読み始めて、第5章までの分です。自分の他言語経験から見てユニークと思えるところを、並びは時系列です。特にC/C++などで起こるメモリ管理上のバグの作り込みを防ぐためのメモリ管理機能(所有権)がいちばん特徴的だろうと思う。

・crate : クレートはRustソースコードを集めたものである、バイナリ形式でもそういうけども

・Cargo.toml : Tom’s Obvious, Minimal Language、パッケージのリストと版数を指定するテキストファイル

・Cargo : Rustのビルドシステム兼パッケージマネージャ

 cargo checkでコンパイルエラーがチェックできる

・println! : !はマクロの意味、簡易に結果出力で使用で構造体ではコンパイルエラー、回避方法(20行ぐらい下)はありますが

・関連関数

String::new() :newは関連関数で、Stringインスタンス作成する

・参照変数のmutable化

io::stdin().read_line(&mut guess) : &mutは参照変数をミュータブルにする、記法はmut &guessではない

・Cargo.lockファイル : ビルドの再現性確保のためにクレートのバージョンを保存しておく、自動生成されユーザがいじるファイルでは無い

・traitはデータ型を分類する仕組み、crateの要素(任意の型となりうるSelfに対して定義されたメソッドの集合のこと)、類型的にはJavaのinterfaceのようなもの

・Shadowing : 前の値を新しい値で覆い隠す(shadowする)ことが許されている、型は違っていても同じでも良い

・タプルの要素は型が違っても大丈夫

let x: (i32, f64, u8) = (500, 6.4, 1);

    let five_hundred = x.0; // タプル要素へのダイレクトアクセス

・Rustの配列は固定長、ベクター型は可変長

    let a: [i32: 5] = [1, 2, 3, 4, 5];

・戻り値の指定方法は;をつけてはいけない、-> は戻り値の型を指定

fn five() -> i32 {
        5 // it’s formula not statement
}         // return value

・条件式を右辺に記述できる

let number = if condition { 5 } else { 6 }; // possible if both type is same

・所有権:これはRustのコア機能(メモリ管理がRustの一大機能)、本質はヒープ領域の管理になりますが

・println!に指示する: 直接エンドユーザ向けの出力で、構造体はこれではダメで

#[derive(Debug)]行を追加必要

・メソッド記法は構造体の文脈で定義(impl Rectangle)される、Golangの構造体との関連付けに書式は違うが似てると思う

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 { // implしてるから&self、構造体インスタンスへの参照
        self.width * self.height
    }
}

・関連関数:implブロック内で定義される、selfを引数に取らない関数。構造体と関連づけられていないからメソッドではない、String::new()はその例。よくある使い方は構造体のインスタンスを返却する関数。

 

admin