Raspberry Pi PicoをMicroPython環境(CircuitPython化)した後に元に戻す方法

前回のエントリでは、Raspberry Pi Pico(以降Picoと呼ぶ)をMicroPython環境で開発できるように設定をしました。

uepon.hatenadiary.com

このままMicroPython環境のままでもいいのですが、ArduinoIDEでも開発したいなあと思ったときに元に戻せないのは結構痛いです。そこで、元にちゃんと戻すことができるのか確認してみようと思います。あまり、そのあたりのことを書いたものがなかったので、本当に戻るのかなと不安もありましたし。

実は3枚セットで購入していたので初期状態のものも手元にあるので比較は簡単でした。 では、実際に行ってみます。

続きを読む

Raspberry Pi PicoでLチカやってみた(MicroPython版)

今更ながらRaspberry Pi Picoが手元に届いたのでちょっと触ってみたいと思います。発売当初に日本からだと入手性が悪いかな~と思って海外サイトで購入したのですが、届いたのが日本発売の2ヶ月以上後だったのは悲しい思い出でした。せっかく届いたので個人的にはこれを使用してショートカット的なキーボードを作ってみたいと思っています。近いものとしては以下のような商品になるかなと思います。

ここまでのものでなくても、遊舎工房さんでも以下のような商品があるので、こちらを使うという手もあるかなと思います。

f:id:ueponx:20210608004816p:plain

そこをあえてRaspberry Pi Picoで自作してみるという感じでしょうか。ただ、単にArduinoIDE環境をつかって開発を行っても新しい学びはなさそうなので(?)今回はMicroPythonを使用する環境でやってみたいと思います。

f:id:ueponx:20210608000651p:plain

今回は環境設定の(その1)という感じでMicroPythonのREPL環境を設定してみます。公式サイトの以下のページを参考にして設定を行いました。

https://www.raspberrypi.org/documentation/rp2040/getting-started/

f:id:ueponx:20210607221909p:plain

すでに、結構な方がRaspberry Pi Pico(以下Pico)のエントリーを書いていると思いますが、Picoの主な機能は次のようになっています。

  • RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom
  • Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz
  • 264KB of SRAM, and 2MB of on-board Flash memory
  • Castellated module allows soldering direct to carrier boards
  • USB 1.1 with device and host support
  • Low-power sleep and dormant modes
  • Drag-and-drop programming using mass storage over USB
  • 26 × multi-function GPIO pins
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels
  • Accurate clock and timer on-chip
  • Temperature sensor
  • Accelerated floating-point libraries on-chip
  • 8 × Programmable I/O (PIO) state machines for custom peripheral support

f:id:ueponx:20210607221929p:plain

あの値段でここまでの機能が搭載されていると思うと、本当に安いなあと思います。

www.switch-science.com

以下のリンクで機能詳細が記載されたpdfファイルがあるのでこちらもチェックです。

https://www.raspberrypi.org/documentation/rp2040/getting-started/static/64b50c4316a7aefef66290dcdecda8be/Pico-R3-SDK11-Pinout.svg

続きを読む

Dockerのコンテナからホスト側アプリへの通信を行う

Dockerコンテナ側からホストOS側のプログラムと通信をしたいなあと思うことがあったので、ちょっと調べて見ました。もちろん、Docker側のネットワークIPを指定すれば、アクセスできますけどもう少し簡単したいなあと思ってのことです。

Dockerで設定された名前を使ってアクセスを行う

Docker Desktop for WindowsDocker Desktop for Macでしか使えないらしいですが、Dockerコンテナ側のOSからhost.docker.internalを名前指定してアクセスするとDocker Desktop側のホストOSと通信を行うことができるようです。

f:id:ueponx:20210602002416p:plain

参考 docs.docker.com

これが求めていた機能だった感じですね。さすがにIPアドレスを覚えるというのは現実的ではないですし。

実験

まずはホスト側でHTTPサーバを起動したいのでpython3のワンライナーを使って起動しておきます。ローカル側からcurlコマンドでアクセスするのも確認しておきます。

ホスト側でHTTPサーバを起動

PS> python3 -m http.server 8080

f:id:ueponx:20210601232959p:plain

続いてはDockerのコンテナを起動します。今回はほとんど機能が必要ないのでalpineのイメージを使用して起動しています。

コンテナ側のOSを起動

PS> docker run -it --rm  alpine

f:id:ueponx:20210601232956p:plain

OSが起動したらcurlをインストールしてから、host.docker.internalにアクセスを行います。

PS> docker run -it --rm alpine

# apk add curl
# curl http://host.docker.internal:8080/

f:id:ueponx:20210602001752p:plain

もちろん、pingコマンドからでもちゃんとアクセスできています。

f:id:ueponx:20210601233016p:plain

コンテナ側の/etc/hostsファイルを起動オプションを使って変更し、アクセスを行う

2つ目の方法としては

dockerコマンドの起動オプションに以下のオプションスイッチを追加することで、/etc/hostsファイルlocalhostの名前でホスト側のDockerネットワークのIPアドレス追加することできます。

※ 追加するオプション --add-host=localhost:【ホスト側のDockerネットワークのIPアドレス】

Dockerホスト側のネットワークのIPアドレス172.28.224.1だった場合の実行例

PS> docker run -it --rm --add-host=localhost:172.28.224.1  alpine

あまりlocalhost固執する理由が自分にはわからないのですが、開発上の理由はあるのかなと思うのでこうしますが、もちろん別のホスト名をつけることも可能です。

Dockerホスト側の名前をtest.devとして、ネットワークのIPアドレス172.28.224.1だった場合の実行例

PS> docker run -it --rm --add-host=test.dev:172.28.224.1  alpine

実験

先程と同様にアクセスのテストを行ってみます。まずはpython3でワンライナーのサーバーを起動しておきます。

f:id:ueponx:20210601233007p:plain

あとはコンテナを先程のオプションをつけて起動します。

PS> docker run -it --rm --add-host=test.dev:172.28.224.1  alpine

# apk add curl
# curl http://test.dev:8080/

f:id:ueponx:20210601233019p:plain

アクセス後のホスト側のHTTPサーバーのログを確認するとちゃんとアクセスができています。

f:id:ueponx:20210601233003p:plain

おわりに

Dockerコンテナ側からホスト側のアプリへのアクセスは問題なくできるようになりました。やっぱり簡単なのは、ホストOS側の環境の制限はありますが、host.docker.internalを使ってのアクセスでしょうか。IPアドレスを覚えなくて良い点が利点です。 あとはコードへの埋め込みなどを考えるのであれば/etc/hostsを変更してのホスト名を変える手もいいのかなと思います。

RaspberryPiにcode-serverをインストールして、ブラウザ上からVisual Studio Codeを使ってみる

以前のエントリでVisual Studio CodeがRaspberryPiでも公式対応したということを書きました。

uepon.hatenadiary.com

ただ、Visual Studio CodeRaspberry Piで使用する機会はX環境を立ち上げているときがほとんどなので、ヘッドレス環境にしている自分からするとほぼ使えないなあという気持ちではありました。

そんなときにWeb経由で実行することのできるcode-serverというものの存在を知りました。Web経由であればX環境がなくてもブラウザ経由でVisual Studio Codeのインターフェースを使用してのファイル編集ができるというメリットはあるのかもしれません。たとえば、iPadからアクセスして編集するとかでしょうか?

code-server 公式GitHub

github.com

Run VS Code on any machine anywhere and access it in the browser.

公式を参照するとcode-serverは任意のマシンで VS Code を実行し、ブラウザでアクセスできるということのようです。

商用ではCoderというものがあり、 そのコードが、MITライセンスでオープンソースになったものがcode-serverとなる模様です。

coder.com

続きを読む

よく見かけるCLIでの画面はscreenFetchというものなのか(今更)

昔から何となくこれってどういうコマンドなんだろうと思っていたのですが、ようやくわかったという今更ネタ。

Linux系システムの情報をブログに乗せるときには個人的には

$ lsb_release -a
$ uname -a
$ cat /etc/debian_version

などを使用していましたが、ぱっと見た感じにはわかりにくいんですよね。んで、雑誌やWEBとかでもよくみる、以下のような画面はどうやっているんだろうなと思ったのですが、検索するワードが思いつかず、上記コマンドでもわかるしいいよね〜というふうにしていました。だた、Chromebookではlsb_releaseコマンドがデフォルトのLinux機能有効化がないので、どーっすっかなあと思ってちゃんと調べて見ました。

f:id:ueponx:20210530231528p:plain

screenFetchというものだったみたいです。GitHubは以下にあります。

github.com

かなりメジャーでもあるのでGitHubから取得しなくてもaptコマンドでインストールすることができます。 以下の様にすればいいかなと思います。

続きを読む