電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

Raspberry Pi Pico W でWifi接続のメモ (MicroPython)

Raspberry Pi Pico W でWifi接続するコードのメモ

ネットワークインターフェースを有効化

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

Wi-Fiの接続

ssid = "(アクセスポイントのSSID)"
password = "(アクセスポイントのパスワード)"
wlan.connect(ssid, password)

接続が完了するのを待つ

while not wlan.isconnected():
    pass

これで接続できる

以下はWifiに接続して、IPアドレスを表示するまでのサンプルコード

# ネットワークインターフェースを有効化
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

# Wi-Fiの接続
ssid = "(アクセスポイントのSSID)"
password = "(アクセスポイントのパスワード)"
wlan.connect(ssid, password)

# 接続が完了するのを待つ
while not wlan.isconnected():
    pass

# IPアドレスを表示
ip_address = wlan.ifconfig()[0]
print("IP address:", ip_address)

PiCar-Xで遊ぶ 2 各モーター制御のメモ

今回は PiCar-X のモーター制御メソッドのメモです。

範囲はサンプルプログラムから推測した実用的な範囲です。
範囲を超えても指定できますが、可動に無理があるので範囲内に収めた方が良いです。

Picardクラス

PiCar-Xで遊ぶ 1 初期セットアップのメモ』 でセットアップをすると、picarxモジュールが使用できるようになりその中にPicardクラスがあります。
Picardクラスに各モーターを制御するメソッドがあります。

カメラの縦の角度

set_camera_servo1_angle(角度)
実用的な角度の範囲は-35~75

カメラの横の角度

set_camera_servo2_angle(角度)
実用的な角度の範囲は-90~90

前輪の角度

set_dir_servo_angle(角度)
実用的な角度の範囲は-30~30

前進

forward(速度)
速度の値の基準は不明
都度適当な値を設定して調整する

後退

backward(速度)
速度の値の基準は不明
都度適当な値を設定して調整する

簡単なサンプル

正面を向いて速度10で前進させるだけの簡単なサンプルです。

#!/usr/bin/env python3

from picarx import Picarx

px = Picarx()

# 正面を向く
px.set_camera_servo1_angle(0)
px.set_camera_servo2_angle(0)

# 前進
px.forward(10)

PiCar-Xで遊ぶ 1 初期セットアップのメモ

ロボット的なもので遊んでみたいと思い、価格も手ごろでカメラも扱える PiCar-X を買ってみました。

似たようなものは簡単なものでmicro:nbitを使用したものやESP32を使用したものを持っているので今度紹介したいと思いますが、今回はsshで接続してPython等でコードを書いたらすぐに実行できれば手軽だなと思いRaspberry Pi用のものが欲しいと思ってました。
今まで所有してたものは距離センサーがあって障害物を回避したりはできたのですが、今回はカメラと組み合わせて色々と遊びたいと思って探してたところ、1万円前後で手に入る PiCar-X を購入してみました。
実際に購入したのは2,3か月前なのですが、やっと組み立てました。

初期セットアップは公式ドキュメントPython環境の公式ドキュメントの方に詳しく書いてあるのですが、初期セットアップは何回も行いそうなので、簡素にコマンドを中心にメモを残しておきたいと思います。

RaspberryPi SDカード作成

Raspberry Pi Imager で「CHOOSE OS」→ 「Raspberry Pi OS(other)」 を選択。
Raspberry Pi OS(Legacy)かRaspberry Pi OS Lite(Legacy)を選択してDebian Busterをインストール

pythonモジュール

sudo apt update
sudo apt upgrade
sudo apt install git python3-pip python3-setuptools python3-smbus

robot-hatインストール

cd /home/pi/
git clone https://github.com/sunfounder/robot-hat.git
cd robot-hat
sudo python3 setup.py install

vilibインストール

cd /home/pi/
git clone https://github.com/sunfounder/vilib.git
cd vilib
sudo python3 install.py

picar-xインストール

cd /home/pi/
git clone -b v2.0 https://github.com/sunfounder/picar-x.git
cd picar-x
sudo python3 setup.py install

i2s アンプに必要なコンポーネントインストール

cd /home/pi/picar-x
sudo bash i2samp.sh

最後に「Would you like to reboot now?」と聞かれるので、yを入力し再起動
再起動後に音が出ない場合は、i2samp.sh スクリプトを数回実行する

Raspberry pi 400で遊ぶ X68000編

今回は『Raspberry pi 400で遊ぶ MSX編』に続いて、Raspberry pi 400 (日本語キーボード)へX68000の環境を構築しました。

Raspberry Pi OS Lite

今回も最小構成にしたいので、Raspberry Pi OS Liteを使用しました。
最新のBullseyeでは起動時に失敗して何回試してもうまく動作しなかったので、前バージョンのBusterを使用しました。
Raspberry Pi Imagerからは、Raspberry Pi OS (Other) から Raspberry Pi OS Lite (Legacy) を選択してインストールします。

初期設定

作業は一通りユーザ「pi」で進めていきます。

raspi-configで設定

raspi-config起動

sudo raspi-config
Wifi設定

[1 System Options] - [Wireless LAN] からWifiを設定

SSH有効化

[2 Interface Options] - [P2 SSH] から を選択してsshを有効化

キーボード設定 (日本語キーボードの場合)

[5 Location Options] - [L3 Keyboard]-[Generic 105-key PC (intl.)] から [Japanese - Japanese (OADG 109A)] を選択

自動ログイン

[1 System Options] - [Boot/Auto Login] から [B2 Console AutoLogin] を選択して自動ログイン

前準備

SDL 1.2、SDL_gfx 1.2、gitをインストールします

sudo apt install -y libsdl1.2-dev
sudo apt install -y libsdl-gfx1.2-dev
sudo apt install -y git

ファイルの展開のため、unzipとlhasaと7zをインストールします。

sudo apt install -y unzip
sudo apt install -y lhasa
sudo apt install -y p7zip-full

px68kの構築

ここではX68000のエミュレータpx68kの環境を構築する手順を書いていきます。

px68kはpiユーザのホーム以下のpx68kディレクトリ(/home/pi/px68k)へインストールすることを想定して進めます

cd
git clone https://github.com/hissorii/px68k
cd px68k
make

ここでmakeのエラーが発生すると思います。

gcc -o x68k/adpcm.o -m32 -g -O0 -fno-strict-aliasing -DUSE_SDLGFX -DNO_MERCURY -DPX68K_VERSION=0.15 -I./x11 -I./x68k -I./fmgen -I./win32api `sdl-config --cflags` -c x68k/adpcm.c
gcc: error: unrecognized command line option ‘-m32’; did you mean ‘-mbe32’?
make: *** [Makefile:112: x68k/adpcm.o] Error 1

Makeファイルの編集をします。

vi Makefile

編集するコマンドはnanoでも慣れてるもので大丈夫です。

"-m32"と書いてある箇所があるので"-mbe32"に変更します。

        MOPT= -m32

        MOPT= -mbe32

保存して再度makeします。

make

いくつかワーニングが表示されましたが、無事に動作しているようです。

BIOSファイル配置

実行にはiplrom.datとcgrom.datが必要。
色々なサイトを参考にX68000 LIBRARYXM6 Pro-68kから拝借

mkdir ~/.keropi
wget http://www.retropc.net/x68000/software/sharp/x68bios/X68BIOSE.LZH
lhasa x X68BIOSE.LZH iplrom.dat
mv iplrom.dat ~/.keropi/iplrom.dat
chmod 644 ~/.keropi/iplrom.dat
wget https://mijet.eludevisibility.org/XM6%20Pro-68k/XM6%20Pro-68k%20DLL%20Package.7z
7z x "XM6 Pro-68k DLL Package.7z" CGROM.DAT
mv CGROM.DAT ~/.keropi/cgrom.dat
chmod 644 ~/.keropi/cgrom.dat

動作確認

X68000 LIBRARYからHuman68kのディスクイメージを取得して起動してみます。

wget http://www.retropc.net/x68000/software/sharp/human302/HUMN302I.LZH
lhasa x HUMN302I.LZH human302.xdf
chmod 644 human302.xdf
./px68k human302.xdf

MSXの場合と同じように、FullHDのデイスプレイでは写真のように右上だけに表示されてしまいました。

/bootにあるconfig.txtを編集します

sudo vi /boot/config.txt

下の定義の部分のコメント"#"を削除して、設定できる画面モードのなかからなるべく全画面に近い解像度を設定しました。

#hdmi_group=1
#hdmi_mode=1

hdmi_group=2
hdmi_mode=9

詳細な意味は省略しますが、これで800x600表示になります。
設定後はリブート

sudo reboot

再度起動するとこんな感じです。

まだ余白がありますが、これ以上小さい解像度に設定すると、px68kの起動で失敗しました。

自動起動

電源を入れたらpx68kの起動まで自動で行えるようにします。
.bashrcの最後にpx68kの起動コマンドを追加します。

.bashrc編集

vi ~/.bashrc

最後の行に追加

cd px68k
./px68k

raspi-configの設定で自動ログインも有効化してるので、これで電源オンの後は自動でログインしてpx68kを起動されるようになります。

メニュー

[F12]でメニューを開いてディスクの入れ替えや、リセット、終了を行うことができます。

問題点

現在マウスカーソルが表示されてしまいます。
コンソールだけで扱いたいので、邪魔なのですが非表示にする方法が不明です。

Raspberry pi 400で遊ぶ MSX編

Raspberry pi 400 (日本語キーボード)を手に入れました。

キーボード一体型なので、サーバにしてssh接続で使うにはスペースを取りすぎて無駄なので、普通のデスクトップPCとして使うことにしました。
普段は最新のRaspbberry Pi OSで使用しているんのですが、キーボード一体型と言えばMSXということで、MSX専用環境を作って遊んでみました。

Raspberry Pi OS Lite

MSXに特化して最小構成にしたいので、Raspberry Pi OS Liteを使用しました。
最新のBullseyeでは起動時に失敗して何回試してもうまく動作しなかったので、前バージョンのBusterを使用しました。
Raspberry Pi Imagerからは、Raspberry Pi OS (Other) から Raspberry Pi OS Lite (Legacy) を選択してインストールします。

初期設定

作業は一通りユーザ「pi」で進めていきます。

raspi-configで設定

raspi-config起動
sudo raspi-config
Wifi設定

[1 System Options] - [Wireless LAN] からWifiを設定

SSH有効化

[2 Interface Options] - [P2 SSH] から を選択してsshを有効化

キーボード設定 (日本語キーボードの場合)

[5 Location Options] - [L3 Keyboard]-[Generic 105-key PC (intl.)] から [Japanese - Japanese (OADG 109A)] を選択

自動ログイン

[1 System Options] - [Boot/Auto Login] から [B2 Console AutoLogin] を選択して自動ログイン

OpenMSXをインストール

aptでインストールできました。

sudo apt install openmsx

OpenMSX起動

openmsx

これだけで起動できます。

日本語レイアウトのキーボードでは、メニューキーでOpenMSXのメニューを開くことができます。
ここからOpenMSXを終了させることができます。

ただこの状態では、FullHDのデイスプレイでは写真のように右上だけに表示されてしまいました。

openmsxの設定ではフルスクリーンにできず、Raspberry Piの設定で変更しました。

画面解像度の設定

/bootにあるconfig.txtを編集します

sudo vi /boot/config.txt

編集するコマンドはnanoでも慣れてるもので大丈夫です。

下の定義の部分のコメント"#"を削除します。

#hdmi_group=1
#hdmi_mode=1

hdmi_group=1
hdmi_mode=1

詳細な意味は省略しますが、これでVGA(640x480)表示になります。
設定後はリブート

sudo reboot

これでopenmsxを実行すると画面いっぱいに表示されました。

ここで画面中央に小さく表示される場合は、一旦openmsxを終了し、設定ファイルを修正します。

vi ~/.openMSX/share/settings.xml

下の設定があると思うので、1を2に変更します。

<setting id="scale_factor">1</setting>

<setting id="scale_factor">2</setting>

これで起動するとちょうど良いサイズになります。

自動起動

実機のMSXと同様に電源を入れたらOpenMSXの起動まで自動で行えるようにします。
.bashrcの最後にopenmsxを追加します。

.bashrc編集

vi ~/.bashrc

最後の行に追加

openmsx

raspi-configの設定で自動ログインも有効化してるので、これで電源オンの後は自動でログインしてopenmsxを起動されるようになります。

OpenMSXの各種操作

日本語レイアウトのキーボードでは、メニューキーでOpenMSXのメニューを開くことができます。
ここでROMファイルを開いたりディスクファイル(ディレクトリ)を開いたりできます。
またBIOSを用意すれば特定の機種をエミュレートし、BASICも扱えるようになります。

BIOSファイルは下のディレトリに入れてください。
/home/pi/.openMSX/share/machines

BIOSの吸出し方法はここでは説明しませんが、FS-A1STの場合は http://bluemsx.msxblue.com/resource.html にある Panasonic dump tools で行いました。
何年か前のファイルを使いまわしてるので、手順は覚えてません。


ゲームコントローラ(ゲームパッド)について

ゲームコントローラはPS4用のものをのUSB接続でそのまま使用できました。
他のUSB接続のものなら使用できそうです。

最後に

Raspberry Pi 用のMSXエミュレータは他にも blueberrymsx 等ありますが、XウィンドウではなくSDLライブラリでの場合は、メニューが表示されないので、操作方法がわかりませんでした。
OpenMSXは独自でメニューを表示してキーボードだけで操作できるので、今回はこちらを選択しました。

今回は特に行わなかったですが、必要のないサービスは起動しないようにし、電源を入れてからのMSX起動までの高速化も行いたいと思います。

Raspberry Pi Pico で MicroPython

Raspberry Pi Picoを入手したので、MicroPythonで遊んでみました。
C/C++で開発してネイティブで動作させることもできるのですが、MicroPythonの方が手軽に遊べるのでRaspberry Pi PicoはMicroPythonで遊ぶことにします。

この手物のはインタプリタは遅くてコンパイルされたネイティブなバイナリコードを直接動作させるイメージがあるのですが、それは一般的に組み込み用のCPUがPCと比較して非力で動作が遅いというのが原因だと思います。
その点Raspberry Pi PicoはARMベースで動作クロックも133MHzもあるので、使用してみると思ったより快適で十分だと思います。まだそんなに高度なことはしていないので、ArduinoでC/C++で動作させるのと感覚的に同等で速度的にも気にならなさそうです。
PHPやJavaScriptからプログラミングを始めた人はわかりませんが、昔のPCでBASICから始めた人はコンパイル言語は憧れでどうしてもC/C++の速度に頼りがちになりますが、十分な速度で動作する場合はインタプリタの方が手軽で良いですね。
Raspberry Pi PicoでMicroPythonを動作させると、0.23W前後で動作しています。

開発環境はThonnyを使用します。
Thonny, Python IDE for beginners
個別にMicroPythonのファームウェアを書き込んでシリアル通信でソースを転送して実行という使い方もできると思いますが、Thonnyだとファームウェアの書き込みからソースの編集、実行まで簡単に出来るので便利です。

ソースファイルはRaspberry Pi Pico内のフラッシュROMに書き込まれます。ファイル単位なので、複数管理できます。
ファイル名を"main.py"とすると、電源投入時に実行されます。

Pythonシェルも使用できるので、リアルタイムにピンや接続したモジュールの値も確認出来て便利です。
例としてGP16にタクトスイッチを接続したとして、

sw1 = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN)
sw1.value()

で押下状態を確認できます。

参考にThonnyでMicroPythonを書き込むまでの手順です

Thonnyを起動してから、Raspberry Pi PicoのBOOTSELボタンを押しながらUSBを接続してください。
メニューの[ツール]-[Options...]を選択して開いたダイアログで[インタプリタ]タブを選択してください。
ここで"MicroPython (Raspberry Pi Pico)"を選択すると、MicroPythonのインストールダイアログが開いてインストールできます。

Raspberry Pi Pico

Raspberry Pi Pico

  • メディア: エレクトロニクス

Raspberry Pi で X68000 (RetroPie不使用)

Raspberry Pi用のX68000型ケースを前から持ってたのですが、ずっと放置していました。

やっと前からやりたかったX68000のエミュレータ専用環境を作ったので、手順をメモとして置いておきます。

RetroPieへインストールする記事はよく見ますが、今回は最小限の環境を作りたかったので、Raspberry Pi 3 Model BへRaspbian Buster Liteをインストールした環境で構築しました。

Raspbian Buster Liteの場所

Raspberry Pi OS – Raspberry Pi

環境構築

ここではX68000のエミュレータpx68kの環境を構築する手順を書いていきます。OSのインストールやネットワーク等のOS環境の手順は省略します。
ユーザは'pi'でログインしていることを前提で進めます。

前準備

SDL 1.2、SDL_gfx 1.2、gitをインストールします

sudo apt-get install -y libsdl1.2-dev
sudo apt-get install -y libsdl-gfx1.2-dev
sudo apt-get install -y git

ZIP形式とLHA形式ファイルの展開のため、unzipとlhasaをインストールします。

sudo apt-get install -y unzip
sudo apt-get install -y lhasa
sudo apt-get install -y p7zip-full

px68kの構築

px68kはpiユーザのホーム以下のpx68kディレクトリ(/home/pi/px68k)へインストールすることを想定して進めます

cd
git clone https://github.com/hissorii/px68k
cd px68k
make

いくつかワーニングが表示されましたが、無事に動作しているようです。

BIOSファイル配置

実行にはiplrom.datとcgrom.datが必要。
色々なサイトを参考にX68000 LIBRARYXM6 Pro-68kから拝借

mkdir ~/.keropi
wget http://www.retropc.net/x68000/software/sharp/x68bios/X68BIOSE.LZH
lhasa x X68BIOSE.LZH iplrom.dat
mv iplrom.dat ~/.keropi/iplrom.dat
chmod 644 ~/.keropi/iplrom.dat
wget https://mijet.eludevisibility.org/XM6%20Pro-68k/XM6%20Pro-68k%20DLL%20Package.7z
7z x "XM6 Pro-68k DLL Package.7z" CGROM.DAT
mv CGROM.DAT ~/.keropi/cgrom.dat
chmod 644 ~/.keropi/cgrom.dat

動作確認

X68000 LIBRARYからHuman68kのディスクイメージを取得して起動してみます。

wget http://www.retropc.net/x68000/software/sharp/human302/HUMN302I.LZH
lhasa x HUMN302I.LZH human302.xdf
chmod 644 human302.xdf
./px68k human302.xdf

これで起動出来たら、ひとまず構築成功です。


自動起動

X68000のエミュレータ専用環境が目的なので、電源ONしたら自動的にpiユーザでログインしてpx68kの起動までできるようにしたいです。

今回はRaspbian Buster Liteが前提なのでCUIログインです。
CUIログイン時にpiユーザで自動ログインするように設定します。

/etc/systemd/system/getty.target.wants/getty@tty1.serviceファイルを編集する。

sudo vi /etc/systemd/system/getty.target.wants/getty@tty1.service

編集内容(ExecStartの定義を書き換える)

ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM

自動起動は普通に.bashrcの最後に追記しました

vi ~/.bashrc

追加コマンド

cd px68k
./px68k

これで電源を入れたらRaspbian起動後、自動的にpiユーザでログインしてpx68kが実行されます。

[F12]でメニューを開いてディスクの入れ替えや、リセット、終了を行うことができます。