0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi 5 でLEGO Mindstorms NXTを操作する

Last updated at Posted at 2025-06-01

目的

LEGO Mindstorms NXTを入手してWindowsから黒線をトレースするプログラムは動くようになった。
Raspberry Piから繋げる方法がないか探しているとNXT-Pythonというモジュールを見つけたので、Raspberry PiからBlueToothを使ってワイヤレスでNXTへ接続して動かすことが出来るか試してみた。

環境

本体      : Raspberry Pi 5
メモリ     : 8GByte
言語      : Python
ライブラリ   : NXT-Python
LEGO Mindstorms : NXT 2.0
ソース     : https://github.com/roxa-delphi/LEGO/tree/main

Pythonの仮想環境を作る

% python -m venv lego
% source lego/bin/activate

NXT-Pythonのインストール

% python -m pip install --upgrade nxt-python

USBを使ってNXTへ接続する

NXT-PythonがUSBへアクセスするための許可を設定する

% sudo cp 60-libnxt.rules /etc/udev/rules.d/
% sudo udevadm control --reload
% sudo udevadm trigger

Raspberry PiとNXTをUSBで接続して、nxt-test コマンドを実行して接続できることを確認した。

BlueToothで接続するための設定

python3-bluez モジュールをインストールして、仮想環境で使用するための設定を行う

% sudo apt install python3-bluez
% cd lego/lib/python3.11/site-packages
% ln -s /usr/lib/python3/dist-packages/bluetooth

nxt-test コマンドを実行するとBleetoothのアドレスが分かるので、

% nxt-test
Finding brick...
NXT brick name: NXT
Host address: 00:16:53:0F:59:9F
Bluetooth signal strengths: (0, 0, 0, 0)
Free user flash: 55844
Protocol version 1.124
Firmware version 1.31
Battery level 7644 mV
Play test sound...done.

.nxt-python.confファイルを作る。

[default]
host = 00:16:53:0F:59:9F

BlueToothのPINコードの設定をする

% bluetoothctl
# agent DisplayYesNo
Agent is already registered
# default-agent
Default agent request successful
# scan on
Discovery started
[CHG] Device 00:16:53:0F:59:9F RSSI: -41
# scan off
# pair 00:16:53:0F:59:9F
Attempting to pair with 00:16:53:0F:59:9F
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:16:53:0F:59:9F Bonded: yes
[CHG] Device 00:16:53:0F:59:9F Paired: yes
Pairing successful
[CHG] Device 00:16:53:0F:59:9F Connected: yes
[CHG] Device 00:16:53:0F:59:9F Connected: no
# connect 00:16:53:0F:59:9F
Attempting to connect to 00:16:53:0F:59:9F
[CHG] Device 00:16:53:0F:59:9F Connected: yes
[CHG] Device 00:16:53:0F:59:9F UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 00:16:53:0F:59:9F ServicesResolved: yes
Failed to connect: org.bluez.Error.NotAvailable br-connection-profile-unavailable
# trust 00:16:53:0F:59:9F
Changing 00:16:53:0F:59:9F trust succeeded
[CHG] Device 00:16:53:0F:59:9F ServicesResolved: no
[CHG] Device 00:16:53:0F:59:9F Connected: no
# exit

LEGOのモーターをBポートに繋いで、前に1回転し、後ろに1回転動かすようにプログラムして動作確認をする。
ソースは https://github.com/roxa-delphi/LEGO/blob/main/motor2.py

% python motor2.py

これでUSBなどのケーブルを繋がずに、BlueToothを使ってワイヤレスでRaspberry PiからNXTを操作できるようになった。

Linus Atorf’s MotorControl を使ってみる

NXT-Pythonから使える、モーターを楽に使うためのライブラリを使ってみる。
https://github.com/schodet/MotorControl から MotorControl22.rxe をダウンロードして、このファイルをNXTへ転送する。

% nxt-push MotorControl22.rxe

黒い線をトレースして動くライントレーサーを作る

LEGOは、
NXTからポートBを右モーターへ、ポートCを左モーターへ繋ぐ。
カラーセンサーをポート3に繋ぐ。
ソースは https://github.com/roxa-delphi/LEGO/blob/main/linetrace.py
センサーで取り込んだ色が黒のときは右回転、黒以外のときは左回転するようにプログラムした。

% python linetrace.py

linetrace.gif

Raspberry PiからワイヤレスでNXTを制御できるようになった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?