フォト
2025年4月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

Raspberry Pi pico

2025年3月 2日 (日)

Zorin OSのVisual Studio Code利用でdebugprobeの利用がうまく行かない


先にネタバレですが Zorin OS でFlathub(Flatpak)版の Visual Studio Code を使ってしまったために
ハマってしまいました。公式サイトからダウンロードしてインストールすることで解決しました。
以下、その状況についてのメモです。

Zorin OSを本格的に使おうと
Visual Studio Codeをインストールし、Raspberry Pi PicoをSDKを使う環境構築を行いました。
「Getting started with Raspberry Pi Pico」に従って環境構築を行ったのですが
debugprobeで書き込み・デバッグでエラーが発生して利用出来ません。

Pxl_20250302_061852536

Windows 11環境、Ubuntu 22.04環境では出来たので結線は問題ないはずです。
Ubuntuと同じようにすればできるはずなのですが..
openocd が  libftdi1.so.2 などのダイナミックリンクライブラリが見えていないようです。
インストールしているのにおかしい..

同じことを外部のターミナルにコピペして実行すると書込が出来ました。
「なんか、vscode上のターミナルの環境おかしい?」
Visual Studio Codeのターミナル上で色々と操作して調べていくと色々と疑問が湧いてきました。

「外部のターミナルとシステム周りのディレクトリ構成が違う!」
「コンテナ?、まるで仮想システムだか別のOS使っているような感じがする」

インストールしたVisual Studio Codeを調べると「Flathub」というリポジトリ版のようで、
Visual Studio Code Flatpak というバージョンでした。

Code

Visual Studio Code Flatpak に掲載の説明を読むとやっと原因が理解できました。
Fatoack 版、ようするに仮想システム上で動いているのね..
その仮想システムで動くvscodeのターミナルは、サンドボックスで動作していて、
ホスト側のOS周りのシステムは切り離されてるため、ドライバー類をインストールしても見えなかったんですね〜
仮想システムは変更不可、書込禁止。
ユーザーホームはホストと同じところが見えているようです。

通常のアプリであれば、仮想システム上で動いていても問題ないのですが、
組み込み系の開発では、色々とドライバー類を使うので厄介です。
ということで、Visual Studio Code の公式サイト から直接ダウンロードしてインストールしたところ、
すんなりと動作しました。

Zorin OS  は「ソフトウェア」というアプリ管理ソフトで、cchrome、Microsofut Edge、GitHubなど
Ubuntuではちょっとインストールが面倒くさいアプリも検索して簡単にインストールできるのですが、
組み込み系、開発系は気をつけてインストールした方が良さそうです。

備考メモ
・debugprobeを利用できるようにする際の追加インストールメモ
 sudo apt install python3 git tar build-essential
 sudo gpasswd -a ユーザ dialout
 sudo apt install gdb-multiarch
 sudo apt install libftdi1-2 libhidapi-hidraw0

2024年9月23日 (月)

Raspberry Pi Pico MicroPython用 SKK日本語変換ライブラリpyskk

以前、豊四季Tiny BASICやArduinoで漢字の表示、日本語文字を扱えるようにしていたのですが、
日本語の入力にはホストコンピュータが必要でした。

組込み系単体で「日本語入力をやってみたい」と思い、
とりあえず、ちびちびと調査・実装を行い、
MicroPython版のSKK日本語変換ライブラリを実装してみました。
お試し実装版は今年の6月に公開したのですが、処理速度的に問題ないようです。
メモリーの消費を抑えるため当然、辞書ファイルはフラッシュメモリ上の配置しています。
(本家Pythonの辞書型使えばらくちんなのですが、MicroPythonではメモリーが、メモリーが..
 MicroPythonで辞書型のイメージで、メモリー消費を気にせず、
 実体はフラッシュメモリ利用のデータ操作が出来るモジュールは思案中)

辞書の検索に本当はハッシュ探索を使いたかったのですが、色々とマンドクサそうなので
実装が簡単な二分探索としました。
まあ、辞書が6万件でも最悪16回の比較処理で済むので良しとしましょう。

これをArduino環境(C・C++)に移植作業を進める予定です。

・Raspberry Pi Pico MicroPython用 SKK日本語変換ライブラリpyskk
 https://github.com/Tamakichi/pico_MicroPython_skk


2024年3月14日 (木)

Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる

先日修正版を公開した「Raspberry Pi Pico MicroPython用の美咲フォントライブラリ」を使って、
MAX7219を使ったLEDドットマトリックスモジュールで日本語表示を試してみました。


MAX7219ベースのLEDドットマトリックスの利用については、文献1が大変参考になりました.. 感謝(*´ω`*)
MAX7219の制御についてては文献2のMike Causerさんが公開しているライブラリを利用しました.. 公開に感謝(*´ω`*)

この実装にあたり、参考にした文献
・文献1.証券所のティッカーみたいな細長い電光掲示板を作る話—MAX7219モジュールとRaspberry Pi Pico (rp2040)とMicrPython
・文献2.micropython-max7219
・文献3.MicroPython libraries framebuf — frame buffer manipulation

Raspberry Pi Pico MicroPython用の美咲フォントライブラリ の最新版では、半角と全角文字を混ぜて表示できます。
半角文字は横4ドットで処理しています。とりあえずは、使えそうかな.. (*´ω`*)

文献3のmicropython-max7219 ライブラリでも半角英数字テキストのスクロール表示メッセージは可能なのですが、
フォントの切り替え不可で、美咲フォントを利用した日本語フォントの表示には対応していません。
そこで、micropython-max7219の Matrix8x8の派生クラスを作成して美咲フォントで日本語表示できるようにしてみました。
MessageBoardクラスを作成しました。
以下は、そのクラス実装のmessageboard.pyとサンプルプログラムのsample_scroll_text.pyです。

ライブラリmax7219.py、messageboard.pyは、pico内にdeviceフォルダを作ってその中に保存します。
ラズパイpicoのmicroPython環境、実現レベルでいい感じと再認識しました(*´ω`*)

ハードウェア構成、結線については文献1、2を参照願います。
pico用に作成しましたが、他の環境でも比較的簡単に移植できると思います。

教育漢字だけだとやはり、ちょっとした文書を表示しようと思うと豆腐(□=教育漢字以外)が表示されてしまいます。
picoでは、フラッシュメモリに余裕があるので全フォント搭載でも問題ないと思うので、対応しようかな..

2024年3月13日 (水)

Raspberry Pi Pico MicroPython用美咲フォントライブラリの更新

前回投稿「美咲フォントの調査(メモ その1)」を元に、
Raspberry Pi Pico MicroPython用の美咲フォントライブラリを修正しました。

更新
・Raspberry Pi Pico MicroPython用美咲フォントライブラリ
   https://github.com/Tamakichi/pico_MicroPython_misakifont

このライブラリに作成にあたり、美咲フォントのBDF形式からPython用のフォントデータ(タプル形式)への変換は、
Pythonでプログラムを組んで生成しました。
BDF Parserという、BDFファイルをお手軽に操作できるライブラリを利用したのですが、
かなり高機能で、今後もBDFファイルを使う場合には利用しようかと思います。

BDF Parser の利用方法の解説は少ないので、個人のメモとして、今後いくつか記述したいと思います。

「Raspberry Pi Pico MicroPython用美咲フォントライブラリ」は、もともとは2012年の美咲フォント 初版をベースにしていたのですが、
初版のBDFはJISコードベースで、それを強引に ユニコードに変換したのでいくつか不具合やバグが混入していました。
今回の修正で、解消できたかと思います(*´ω`*)

本ライブラリは、「教育漢字」に絞っているのですが、フォントデータの生成はPythonでツールを作成したので、
比較的簡単にフォントの追加や別のフォント(BDF形式)の利用にも対応可能です。
ツールについては、別途公開したいと思います。

先行してPython用ライブラリを更新したのですが、Arduino版についても近日中に公開いたします。

2023年2月13日 (月)

使い勝手の良いRP2040搭載「Seeed Studio XIAO RP2040」

Seeed Studio XIAO RP2040MicroPythonを使うにおいて、お手軽で使い勝手が良いです。
Type-Cのコネクタで耐久性もよさそうです。リセットボタンもあります。

Image0

■ ボードに関する情報
 PlatformSeeed Studio XIAOSeeed Studio XIAO RP2040Overview

秋月電子でも入手出来ます。
   秋月電子 - Seeed XIAO RP2040
  Image04

ボードの構成
Xinfront
ピンレイアウト
Xinpin
ボード上にはオリジナル版にはない「USER LED」と「RGB LED(NeoPixcel)」が搭載されており、
ボードだけで、ちょっとした実験が出来ます。

利用するにあたり、公式サイトで回路図をチェックしてみました。

■ USER LED
Image03

IO25IO16IO17に割り付けられており、共通アノードに3.3Vが供給されています。
アクティブLOW(ポートがLOWで点灯、HIGHで消灯)のようです。
このため、ボードの起動後の初期状態では USER LEDが点灯するようです。

■RGB LED(NeoPixcel)
Image02

NeoPixcelDINNEOPIXVCCNEO_PWR が割り付けられています。
下のRP2040周りの回路図をみるとNEOPIXGPIO12NEO_PWRGPIO11が割り付けられているのが分かりました。
電源供給もGPIOピンから行っているようです。

Mpu

■USER LED とRGB LED(NeoPixcel)と制御
ピンの割り付けが分かったので、MicroPythonにて操作してみました。

とりあえず、こんな感じでLEDを操作出来ました。

2023年2月 9日 (木)

Raspberry Pi Pico MicroPython用のマルチフォントライブラリ

Raspberry Pi PicoMicroPythonは、かなりイケていることが分かり、
Arduino用のフォントライブラリを移植してみました。

■Raspberry Pi Pico MicroPython用のマルチフォントライブラリ
  https://github.com/Tamakichi/pico_MicroPython_Multifont

Arduino用漢字フォントライブラリ SDカード版からの移植なのです。
MicroPythonでは、フラッシュメモリ上にファイルを置いて読み書き出来るので、サックっと移植出来ました。

動作確認(使い物ものになるか)として、
 ・16x16ドットマトリックのNeoPixcel
 ・OLEDディスプレイ SSD1306(I2C接続 128x64ドット)
で遊んでみました。

■16x16ドットマトリックのNeoPixcelで日本語表示(sample_mfont_neopixel.py)
 Dsc00107

全点フル輝度で点灯すると、電力不足でリセットがかかったり動作不安定となります。
本格的に使うには、電源回りの補強が必要です。とりあえず、実験レベルでの動作確認です。

動いている様子
 

動画のデモでは12ドットフォントを指定して表示しています。
とりあえず、見た目上はまともに動いています。スクロールも滑らかです(*´ω`*)
これで、インタプリタ言語で処理しているかと思うと上出来ですね(^^♪

■OLEDディスプレイ SSD1306(I2C接続 128x64ドット) で日本語表示(sample_oled_mfont.py)
Dsc00101

動いている様子


表示は1文字ずつディレイ(時間待ち)を入れて表示しています。
ディレイを抜いてフルスピードにしても表示は遅いです。

遅いI2C接続が足を引っ張っているというより、やはり処理的にちょっとキツイかな。
利用しているSSD1306ライブラリを見直せば何とかなるかもしれません。

メインのプログラムはこんな感じです

定数部分は、各自のご利用ボードに合わせて適宜変更して下さい。
サンプルプログラムでは、「後からインスタンス・メソッドの追加できるか?」を試してみたのですが、出来ますね。

# SSD1306_I2Cに漢字表示インスタンス・メソッドの追加
SSD1306_I2C.drawText = drawText

SSD1306_I2C.drawFont = drawFont3
SSD1306_I2C.newLine = newLine


■まとめ

この記事でやっていることは、いままでArduinoでやってきたことなのですが、
MicroPythonでも、そこそこやれるようですね。しばらくはpicoで遊んでみます。

2023年2月 8日 (水)

MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示

久しぶりのブログ更新です。

Pythonプログラミングのお勉強で、手持ちのRaspberry Pi picoMicroPythonをいじってみたのですが、
インタプリタの処理と思えないほど、サクサクと動いてびっくりです。

8x8ドットNeoPixcelで文字表示をやって見たところ、難なく処理をこなしてくれました。

Dsc00061

動いている様子


メインのそースはこんな感じです。

MicroPythonはコンパイル不要で、C言語よりもお手軽でいいですね(*´ω`*)
文字の表示には美咲フォントを利用しました。とりあえず、モジュール化してみました。
Arduino版を流用しました。
■ Raspberry Pi Pico MicroPython用美咲フォントライブラリ
   https://github.com/Tamakichi/pico_MicroPython_misakifont

サンプルプログラムとして、ドットマトリックスのプログラムを添付しています。
Raspberry Pi Pico
MicroPythonには、
NeoPixcelの制御を行うライブラリが組み込まれているので、
マトリック表示のためのライブラリ部のみを自作しています。
マトリック表示処理の要としては、マトリック表示では、縦・横の座標でピクセルを制御したいところ、
NeoPixcelのライブラリではのピクセルを0からの番号指定のため、
   縦・横 指定 ⇒ 番号(0~)
の変換をするところですかね..

  neomatrix.py:
    # ドットマトリックス 指定座標ピクセル番号変換
    def XYtoNo(self, x, y):
        return self.width*y + x if y&1 else self.width*y + self.width-1 -x

縦yが奇数と偶数で横xの方向が異なります。
表示が鏡文字になったり、上下さかさまとなる製品の場合、この変換処理を修正すれば対処できると思います。


2021年3月29日 (月)

Raspberry Pi PicoにUSBキーボードを繋げてみる

Raspberry Pi Picoには、USBホスト機能(USBデバイスを接続できる)があります。
早速動作確認してみました。
結果を先に述べると、利用出来ますね! よしよし (*´ω`*)


■ 利用したサンプルプログラム
   pico-examples/usb/host/host_hid

上記のサンプルは、pico-exsamplesの一括コンパイル時にビルドされますが、
後々の調査・改造のため、今回はこれだけを取り出してビルドしました。

実験の様子
Dscn3018

動作確認出力はPCとのUSB接続出来ないため、シリアルポート経由で行いました。
USB-UARTモジュールを利用し、picoへの5V電源供給もこのモジュールから行いました。
プログラムの書き込み後、マイクロUSBコネクタには変換ケーブルを接続してキーボードを接続しました。

Dscn3022

picoへの5V供給は、40ピンのVBUSから行っています(写真の右側の赤線⇒VBUS、黒線⇒GND )。
これによりUSBデバイスへの5V供給を行うことが出来ます。
動作確認出力はシリアル通信 1ピンGP0(UART0 TX)、2ピンGP1(UART0 RX)を使っています。

実行結果

キーボード打ち込みを行うと、文字入力が出来ました。やったー!
03_20210329091701

このキーボード、IchigoJam Rでは利用出来なかったのですが、問題なさそうです。

ただし、利用したサンプルプログラムではUSキーボード配列用みたいなので、
日本語キーボード対応の調査が必要ですね。

また、キャプスロック等のキーボード上のLEDの点灯制御が出来ていないようなので、
これについても要調査です。

USBキーボードの利用については、何とかなりそうです。
ついでに、手持ちのワイアレスキーボードを試して見ましたが動きました。

Dscn3026

スタンドアロンで稼働する豊四季タイニーBASICは実装出来そうですね。
次は、フラッシュメモリへのデータ保存について調べてみます。
その後は、自作ライブラリの実装&組み込み方法の調査かな..

2021年3月25日 (木)

Pimoroni Pico VGA Demo Baseを入手しました

Raspberry Pi Pico用のVGA出力ボード「Pimoroni Pico VGA Demo Base」入手しました。

 Pimoroni Pico VGA Demo Base
01_20210325160401

海外からの入手です。送料は800円くらいでした。1週間ほどで到着しました。
amazon(jp)でも、扱っているようですが6,200円と割高ですね。


届いた製品
02_20210325161401
左側のユニバーサル基板は、一緒に注文したものです。

作りはしっかりしています。
03_20210325161401

裏の"海賊ロボ忍者さる"と海賊の顔絵、どこかで見覚えがありますねぇ.. 
04_20210325161401

ボード上にpicoを装着、特に問題なく乗せられました。 
05_20210325161401

スペーサー用のネジ穴径に若干問題あり。手持ちのスペーサーが付けられませんでした。
穴が3mmより小さい(2.8mmくらい?)です。

07_20210325161401

仕方なく、丸棒やすりと3mmドリルで穴を広げることにしました。
08_20210325161401

丸棒やすりでぐりぐりした後、3mmドリルが通るようにしました。
09_20210325161401

無事、スペーサーが装着出来ました。
15_20210325161401

準備OK! 早速サンプルプログラムを動かしてみます。


利用したライブラリ&サンプルプログラム
 ■ raspberrypi/pico-extras
    https://github.com/raspberrypi/pico-extras
    公式ライブラリですが、Pico SDKの追加ライブラリ的位置づけのようです。

 ■ raspberrypi/pico-playground
   https://github.com/raspberrypi/pico-playground
   pico-extrasを使ったサンプルプログラムです。
   ビルドにはpico SDKも必要です。

ビルド

ビルド作業はコマンドプロンプト 「Developer Command Prompt for VS2019」上で行いました。
私の環境(Windows 10)では、"D:\Raspberry Pi Pico"にライブラリやサンプルプログラムを配置しています。

実行コマンド
D:
cd "D:\Raspberry Pi Pico"
git clone -b master https://github.com/raspberrypi/pico-extras
git clone -b master https://github.com/raspberrypi/pico-playground.git
setx PICO_EXTRAS_PATH "D:\Raspberry Pi Pico\pico-extras"
cd pico-playground
mkdir build
cd build
cmake -G "NMake Makefiles" -D"PICO_BOARD=vgaboard" ..
nmake

特につまずくことなく、ビルド出来ました。


サンプルプログラムの実行結果

いくつかのサンプルプログラムを書き込んで実行してみました。

ラズパイのあれが動くデモ、表示は綺麗でちらつき等は全く無いです。
10_20210325190401

ゲームの背景っぽいのがスクロールするサンプルプログラム
11_20210325190401

文字を表示するサンプルプログラム
12_20210325190401

13_20210325190401

思っていた以上に、表示が綺麗できっちりと表示が出来てます。
ゲームなんか実装出来そうですね。
表示系は、色々と出来そうです。後はキーボードやゲームパッドが使えると良いですね。。
調べてみます。

 

2021年3月21日 (日)

Raspberry Pi Picoで4桁7セグLEDをダイナミック表示

Raspberry Pi PicoでのC++/C言語プログラミングの練習の継続..
タイマー割り込みの練習として、4桁7セグLEDの表示をやってみました。

01_20210321080701

動いている様子


以前、bluePill(Arduino環境)でやったプログラムを流用してやってみたのですが、意外とハマってしましました。

回路図

02_20210321083201

GP2
GP13ピンを使って、表示を行っています。
GP6GP137セグLEDの点灯制御用で、1つのLEDあたり、4mAを流すようにR1R8の抵抗を330Ωにしています。
GP2GP5は表示する桁の表示制御用です。LED8個用の電流32mAを流すため、スイッチイング用にトランジスタを使っています。

この回路は、あまり良くないです。
GPIO
ピンをシンク(吸い込み)で駆動させるつもりでしたが、
後から、Raspberry Pi PicoではGPIOオープンドレイン出力(オープンコレクタ)の指定で出来ないことが分かり、
変更も面倒なので、無理やり使っています。
とりあえず、タイマー割り込みの練習が目的のため、良しとします。

流用元のBlullPillでは出力ピンをシンク(吸い込み、オープンドレイン出力指定)にして、LEDの駆動電圧の変更(5V3.3V)に
対応出来るようにしていたのですが(2年前はそのようにやっていたらしい)、
今回、安直に出力ピンの動作を 0V or ハイインピーダンス0V or 3.3V に置き換えたところ、
LEDの駆動電圧をHighと異なる電圧にするとまともに動きません。最初、5Vをかかていたため動かなくてハマりました。

GP6
GP13の出力をLow(0V)にした場合にLEDが点灯、High(3.3V)にした場合(本当はハイインピーダンスにしたかった)、
トランジスタのエミッタの電圧が3.3Vの場合と同じになって電位差無しでLEDが消灯します。
トランジスタのエミッタの電圧が5Vの場合は、3.3V5Vで電位差が生じてしまい、不可解な挙動になりました。
ハイインピーダンスに出来れば、3.3Vでも5Vでも電流が流れないです。

Arduinoのプログラムの移植自体は意外と楽ちんでした。

プログラムソース


タイマー割り込みを行うAPIは、高レベルAPIのpico_timehardware_timerの2種類が用意されているようですが、
今回はpico_timeを使っています。
Arduinoのような感じで、抽象化されていて簡単に使うことが出来ました。
ハードウェア的にはタイマーは1つしかないようですが、多重のタイマー割り込みについても、いずれ検証してみます。