HOME | Raspberry Pi | ビジネス書籍紹介 | 2024-11-22 (Fri) Today's Access : 179 Total : 1098259. Since 10 Sep. 2019

Raspberry Pi OS Bookworm & PlatformIO
2024.10.24

YouTube でも紹介しています。画像をクリックすると再生できます。

2024年10月10日の記事では、Arduino NANO ESP32を用いて、USB-MIDIを制御しました

NANO ESP32 USB MIDI

●Arduino Nano ESP32


NANO ESP32用コードのビルドには、Raspberry Pi 3 model B、 OSには、Raspbian 10 buster 32bit版を使って、開発環境にPlatformIOを用いました。
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"

この際、PlatformIO上のESP32フレームワーク・バージョンは、3.20009.0 (2.0.9) で、 コードのビルドはできるものの、NANO ESP32 へアップロードには対応していません。 このときは応急措置的に Windows版のArduino IDEでアップロードしました
$ pio run -t upload
embedded:startup.tcl:26: Error: Can't find interface/ftdi/dfu.cfg

NANO ESP32のアップロードには、dfu プロトコルを使用しています
arduino_nano_esp32.json
  "upload": {
    "flash_size": "16MB",
    "maximum_ram_size": 327680,
    "maximum_size": 16777216,
    "require_upload_port": true,
    "speed": 460800,
    "protocol": "dfu"
  },
アップロードを行うには、framework-arduinoespressif32 バージョン 2.0.17 を必要とします。

そこで今回は、64bit版Raspberry Pi OS、Debian version: 12 (bookworm)を用いて、ビルド環境を構築します



まずは、最新の2024年7月4日版bookwormをインストールしてみます。 ラズベリーパイは、Raspberry Pi 3 Model B Rev 1.2を使用しています
$ cat /proc/cpuinfo
Model : Raspberry Pi 3 Model B Rev 1.2

●ネットワーク設定

Raspberry Pi OS 12 Bookworm からネットワークの設定が dhcpcd から NetworkManager に変更されました。 ネットワーク設定はデスクトップの通信マークをクリックし、SSIDを選択して行います。
https://hassiweb.gitlab.io/memo/docs/memo/raspberry-pi/raspberry-pi-os/network-config/

ネットワークインターフェースに対するプロファイル名一覧を表示します。
$ nmcli connection show
NAME                UUID                     TYPE      DEVICE
XXXXXXXXXXXX        t4i3jt91-r8u3-43j2-23ib  wifi      wlan0
lo                  8jtiew9d-ut82-j287-2f8x  loopback  lo
Wired connection 1  2iut82k5-tewi-8j43-2ij3  ethernet  --
$ sudo cat /etc/NetworkManager/system-connections/XXXXXXXXXXXX.nmconnection
[connection]
id=XXXXXXXXXXXX
uuid=t4i3jt91-r8u3-43j2-23ib
type=wifi
interface-name=wlan0
timestamp=1728818873

[wifi]
mode=infrastructure
ssid=XXXXXXXXXXXX

[wifi-security]
key-mgmt=wpa-psk
psk=zzzzzzzzzzzzz

[ipv4]
address1=192.168.11.23/24,192.168.11.1
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=disabled

[proxy]

NetworkManagerコマンドによる設定変更
$ sudo nmcli connection modify 'プロファイル名' ipv4.addresses "<IP address>/<Prefix>" ipv4.gateway "<Gateway address>" ipv4.dns "<DNS address>" ipv4.method "manual"

例えば、DNSアドレスを 192.168.11.1 から 192.168.11.3 に変更してみます
$ sudo nmcli connection modify 'XXXXXXXXXXXX' ipv4.dns "192.168.11.3"

$ sudo cat /etc/NetworkManager/system-connections/XXXXXXXXXXXX.nmconnection
..........
[ipv4]
address1=192.168.11.23/24,192.168.11.1
dns=192.168.11.3;
method=manual
..........

●NANO ESP32 ビルド&アップロード
PlatformIOのインストールは後述しますが、まずは結果をみてみます

$ pio run -t upload
PLATFORM: Espressif 32 (6.9.0) > Arduino Nano ESP32
PACKAGES:
 - framework-arduinoespressif32 @ 3.20017.0 (2.0.17)

........

Download        [=======================  ]  92%       733184 bytes
Download        [=======================  ]  93%       745472 bytes
Download        [======================== ]  96%       765952 bytes
Download        [=========================] 100%       789744 bytes
Download done.
DFU state(7) = dfuMANIFEST, status(0) = No error condition is present
DFU state(2) = dfuIDLE, status(0) = No error condition is present
Done!
frameworkのバージョンが 2.0.17 になり、dfuプロトコルでのアップロードも正常に行われます。 ただし、32bit版 bookworm ではアップロードに失敗します。

Arduino NANO ESP32のビルドには成功したので、普段よく使用しているESP32-S2でのビルドも確認してみました
$ pio init -b adafruit_qtpy_esp32s2
$ pio run
KeyError: 'framework-arduinoespressif32-libs':
 File "/home/pi/.platformio/penv/lib/python3.11/site-packages/platformio/builder/main.py", line 173:
  env.SConscript("$BUILD_SCRIPT")

そうすると、Pythonスクリプト内でエラーが発生してしまいます。 ネットで解決策を調査してみましたが、うまく対応できませんでした。

そこで、アーカイブで、bullseyeからbookwormに切り替わった直後の2023年10月10日版をダウンロードしてみました

Raspberry Pi OS with desktop
Release date: Oct 10th 2023
System: 64-bit
Debian version: 12 (bookworm)

raspios_arm64-2023-10-10

ダウンロードして解凍、Win32DiskImagerなどでmicroSDカードに焼き付けます。 Raspberry Pi を起動して、指示に従って設定していきます。

OS のバージョンを確認しておきます
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm

●PlatformIO インストール

$ pip3 --version
pip 23.0.1 from /usr/lib/python3/dist-packages/pip (python 3.11)

以前のように pip でインストールしようとするとエラーになります
$ pip3 install -U platformio
error: externally-managed-environment

PlatformIO公式サイトからの引用です。
PlatformIO は管理者権限や sudo 権限を必要とせずに動作します。 デフォルトのユーザー アカウントを使用し、追加の権限なしでインストールを実行することを強くお勧めします。
PlatformIO / Installer Script (Recommended)

$ curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py

$ python3 get-platformio.py
Installer version: 1.2.2
Platform: Linux-6.6.51+rpt-rpi-v8-aarch64-with-glibc2.36
Python version: 3.11.2 (main, Aug 26 2024, 07:20:54) [GCC 12.2.0]
Python path: /usr/bin/python3
Creating a virtual environment at /home/pi/.platformio/penv
.....
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 23.0.1
Uninstalling pip-23.0.1:
Successfully uninstalled pip-23.0.1
Successfully installed pip-24.2
PIP has been successfully updated!
Virtual environment has been successfully created!
.....
PlatformIO Core has been successfully installed into an isolated environment `/home/pi/.platformio/penv`!

●udev rules 設定
99-platformio-udev.rules
udevルールを追加して繁栄させます

$ curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules

$ sudo service udev restart

●仮想環境パス設定
現在設定されているパスを確認します
$ echo $PATH | tr ":" "\n"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/local/games
/usr/games

Python 仮想環境のデフォルトの場所は、~/.platformio/penv/bin になります
$ echo 'export PATH=${PATH}:~/.platformio/penv/bin' >> ~/.bashrc
$ source ~/.bashrc

●Arduino NANO ESP32のビルド

$ pio boards 'NANO ESP32'
========================================================================
ID                  MCU      Frequency  Flash  RAM    Name
------------------  -------  ---------  -----  -----  ------------------
arduino_nano_esp32  ESP32S3  240MHz     16MB   320KB  Arduino Nano ESP32
bookworm では、NANO ESP32のボード情報をサポートしています
$ cat ~/.platformio/platforms/espressif32/boards/arduino_nano_esp32.json
{
  "build": {
    "arduino":{
      "ldscript": "esp32s3_out.ld",
      "partitions": "app3M_fat9M_fact512k_16MB.csv",
      "memory_type": "qio_opi"
    },
    "core": "esp32",
    "extra_flags": [
      "-DARDUINO_NANO_ESP32",
      "-DBOARD_HAS_PIN_REMAP",
      "-DBOARD_HAS_PSRAM",
      "-DUSB_MANUFACTURER=\\\"Arduino\\\"",
      "-DUSB_PRODUCT=\\\"NanoESP32\\\"",
      "-DARDUINO_USB_CDC_ON_BOOT=1",
      "-DARDUINO_USB_DFU_ON_BOOT=1",
      "-DARDUINO_RUNNING_CORE=1",
      "-DARDUINO_EVENT_RUNNING_CORE=1"
    ],
    "f_cpu": "240000000L",
    "f_flash": "80000000L",
    "flash_mode": "qio",
    "hwids": [
      [
        "0x2341",
        "0x0070"
      ]
    ],
    "mcu": "esp32s3",
    "variant": "arduino_nano_nora"
  },
  "connectivity": [
    "bluetooth",
    "wifi"
  ],
  "debug": {
    "openocd_target": "esp32s3.cfg"
  },
  "frameworks": [
    "arduino",
    "espidf"
  ],
  "name": "Arduino Nano ESP32",
  "upload": {
    "flash_size": "16MB",
    "maximum_ram_size": 327680,
    "maximum_size": 16777216,
    "require_upload_port": true,
    "speed": 460800,
    "protocol": "dfu"
  },
  "url": "https://docs.arduino.cc/hardware/nano-esp32",
  "vendor": "Arduino"
}

$ cat ~/.platformio/packages/framework-arduinoespressif32/variants/arduino_nano_nora/pins_arduino.h
#ifndef Pins_Arduino_h
#define Pins_Arduino_h

#include 

#define USB_VID 0x2341
#define USB_PID 0x0070

#ifndef __cplusplus
#define constexpr const
#endif

// primary pin names

#if defined(BOARD_HAS_PIN_REMAP) && !defined(BOARD_USES_HW_GPIO_NUMBERS)

// Arduino style definitions (API uses Dx)

static constexpr uint8_t D0         = 0; // also RX
static constexpr uint8_t D1         = 1; // also TX
static constexpr uint8_t D2         = 2;
static constexpr uint8_t D3         = 3; // also CTS
static constexpr uint8_t D4         = 4; // also DSR
static constexpr uint8_t D5         = 5;
static constexpr uint8_t D6         = 6;
static constexpr uint8_t D7         = 7;
static constexpr uint8_t D8         = 8;
static constexpr uint8_t D9         = 9;
static constexpr uint8_t D10        = 10; // also SS
static constexpr uint8_t D11        = 11; // also MOSI
static constexpr uint8_t D12        = 12; // also MISO
static constexpr uint8_t D13        = 13; // also SCK, LED_BUILTIN
static constexpr uint8_t LED_RED    = 14;
static constexpr uint8_t LED_GREEN  = 15;
static constexpr uint8_t LED_BLUE   = 16; // also RTS

static constexpr uint8_t A0         = 17; // also DTR
static constexpr uint8_t A1         = 18;
static constexpr uint8_t A2         = 19;
static constexpr uint8_t A3         = 20;
static constexpr uint8_t A4         = 21; // also SDA
static constexpr uint8_t A5         = 22; // also SCL
static constexpr uint8_t A6         = 23;
static constexpr uint8_t A7         = 24;

#else

// ESP32-style definitions (API uses GPIOx)

static constexpr uint8_t D0         = 44; // also RX
static constexpr uint8_t D1         = 43; // also TX
static constexpr uint8_t D2         = 5;
static constexpr uint8_t D3         = 6;  // also CTS
static constexpr uint8_t D4         = 7;  // also DSR
static constexpr uint8_t D5         = 8;
static constexpr uint8_t D6         = 9;
static constexpr uint8_t D7         = 10;
static constexpr uint8_t D8         = 17;
static constexpr uint8_t D9         = 18;
static constexpr uint8_t D10        = 21; // also SS
static constexpr uint8_t D11        = 38; // also MOSI
static constexpr uint8_t D12        = 47; // also MISO
static constexpr uint8_t D13        = 48; // also SCK, LED_BUILTIN
static constexpr uint8_t LED_RED    = 46;
static constexpr uint8_t LED_GREEN  = 0;
static constexpr uint8_t LED_BLUE   = 45; // also RTS

static constexpr uint8_t A0         = 1;  // also DTR
static constexpr uint8_t A1         = 2;
static constexpr uint8_t A2         = 3;
static constexpr uint8_t A3         = 4;
static constexpr uint8_t A4         = 11; // also SDA
static constexpr uint8_t A5         = 12; // also SCL
static constexpr uint8_t A6         = 13;
static constexpr uint8_t A7         = 14;

#endif

// Aliases

static constexpr uint8_t LEDR = LED_RED;
static constexpr uint8_t LEDG = LED_GREEN;
static constexpr uint8_t LEDB = LED_BLUE;

// alternate pin functions

static constexpr uint8_t LED_BUILTIN = D13;

static constexpr uint8_t TX   = D1;
static constexpr uint8_t RX   = D0;
static constexpr uint8_t RTS  = LED_BLUE;
static constexpr uint8_t CTS  = D3;
static constexpr uint8_t DTR  = A0;
static constexpr uint8_t DSR  = D4;

static constexpr uint8_t SS   = D10;
static constexpr uint8_t MOSI = D11;
static constexpr uint8_t MISO = D12;
static constexpr uint8_t SCK  = D13;

static constexpr uint8_t SDA  = A4;
static constexpr uint8_t SCL  = A5;

#define PIN_I2S_SCK     D7
#define PIN_I2S_FS      D8
#define PIN_I2S_SD      D9
#define PIN_I2S_SD_OUT  D9 // same as bidir
#define PIN_I2S_SD_IN   D10

#ifndef __cplusplus
#undef constexpr
#endif

#endif /* Pins_Arduino_h */

$ pio init -b arduino_nano_esp32
[env:arduino_nano_esp32]
platform = espressif32
board = arduino_nano_esp32
framework = arduino

$ pio run -t upload

●PHPインストール
ファイル編集用にPHPをインストールしておきます
$ sudo apt update
$ apt-cache search php8
$ sudo apt-get install php8.2
$ php --version
PHP 8.2.24 (cli) (built: Sep 27 2024 04:16:10) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.24, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.24, Copyright (c), by Zend Technologies
●microSDカードの空容量
32GBのmicroSDカードに開発環境を構築した場合の空容量は下記のようになります
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              323596       0    323596   0% /dev
tmpfs              93028    1116     91912   2% /run
/dev/mmcblk0p2  30087452 7462624  21076536  27% /
tmpfs             465140       8    465132   1% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
/dev/mmcblk0p1    522232   74008    448224  15% /boot/firmware
tmpfs              93028      40     92988   1% /run/user/1000
●不具合解決に向けて
・32bit版OSでモジュールが存在しない場合には64ビット版OSをインストールしてみる
・Pythonスクリプトで不具合が発生した場合には、少し前にリリースされたOSで試してみる
 Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2019.12.19 ファイル共有 dokany + Win-sshfs
2019.12.26 Arduino開発環境構築 PlatformIO
2022.02.08 Zero 2 W と Bullseye
2022.07.15 NAS導入とApache2パス設定
2023.04.01 秋月・amazon・PIMORONI・tindie
2023.07.16 ログ表示
2023.10.16 漢字フォントの表示と拡張
2024.04.23 NASリプレース
2024.10.24 Bookworm & PlatformIO


Arduinoで学ぶ組込みシステム入門(第2版)
●Arduinoを使って組込みシステム開発を理解する
・ハードウェアやソフトウェアなどの基礎知識/ ・設計から実装までを系統的に説明するモデルベース開発/ ・Arduinoを用いた実際の開発例

最新 使える! MATLAB 第3版
◆◆すぐに「使える!」 全ページフルカラー!◆◆
・MATLAB R2022bに対応し、解説もより詳しく!/ ・コマンド・スクリプトの例が豊富で、動かして学べる!/ ・超基本から解説。これから使いはじめる人にぴったり!/ ・全編フルカラー、スクリーンショットも豊富!

Amazon Web Services基礎からのネットワーク&サーバー構築改訂4版
1.システム構築をインフラから始めるには/ 2.ネットワークを構築する/ 3.サーバーを構築する/ 4.Webサーバーソフトをインストールする/ 5.HTTPの動きを確認する/ 6.プライベートサブネットを構築する/ 7.NATを構築する/ 8.DBを用いたブログシステムの構築/ 9.TCP/IPによる通信の仕組みを理解する

C言語は第二の母国語: 独学学生時代から企業内IT職人時代に培った、独立のための技術とノウハウ 平田豊著
学生時代から独学でプログラミングをはじめ、企業内でデバイスドライバを開発し、そして独立後もたくさんのアプリケーション開発や技術書制作に携わってきた著者。その筆者が大事に使い続ける「C言語」の“昔と今”について、気づいたことや役立つ知識、使ってきたツールなどについて、これまで記してきたことを整理してまとめました。 本書では、現役プログラマーだけでなく、これからプログラミングを学ぶ学生などにも有益な情報やノウハウを、筆者の経験を元に紹介しています。

1冊ですべて身につくJavaScript入門講座
・最初の一歩が踏み出せる! 初心者に寄り添うやさしい解説 ・最新の技術が身につく! 今のJavaScriptの書き方・使い方 ・絶対に知っておきたい! アニメーションとイベントの知識 ・プログラミングの基本から実装方法まですべて学べる

図解! Git & GitHubのツボとコツがゼッタイにわかる本
ソフトウェア開発では欠かすことのできないGit、GitHub。 これからGit、GitHubを使いたいという入門者の方でも、実際に手を動かしながら使い方を学べます。

C自作の鉄則!2023 (日経BPパソコンベストムック)
メーカー製のパソコンはスペックが中途半端で、自分が本当に欲しい機種がない――。そう思っている人には、ぜひ自作パソコンをお薦めします。自作パソコンのパーツは進化が速く、しかも驚くほど種類が豊富。価格も性能も、幅広く用意されているため、満足度100%の“自分だけの1台”を手に入れることができます。

Interface 2023年6月号
特集:第1部 フィルタ設計 基礎の基礎/ 第2部 係数アプリや波形観測アプリで合点!FIR&IIRフィルタ作り/ 第3部 配布プリント基板で体験!マイコンで動くフィルタ作り

日経Linux 2023年5月号
【特集 1】 AI時代の最強フリーソフト ~ 25のやりたいを実現! 【特集 2】 AWS、Azureのうまみを無料で体感!面倒なことはクラウドに任せよう 【特集 3】 新しいRaspberry Pi Cameraで遊んでみよう 【特集 4】 Linuxで旧型PCを復活! 1kg切るモバイルPCを「ChromeOS Flex」でChromebook化

ラズパイマガジン2022年秋号
特集:5大人気ボード 電子工作超入門
「半導体不足で在庫が不足し、電子工作のボードがなかなか買えない…」。そんな今にふさわしい特集を企画しました。5種の人気ボードにすべて対応した電子工作の入門特集です。「GPIO」や「I2C」を使った電子パーツの制御方法は、どのボードでも同じです。手に入れられたボードを使って、今こそ電子工作を始めましょう。

地方で稼ぐ! ITエンジニアのすすめ
学歴、理系の知識、専門スキル……全部なくてもITエンジニアになれる! 地方でも高収入でやりがいをもって働ける!ITエンジニアの魅力を一挙大公開

Raspberry Piのはじめ方2022
本書は、ラズパイやPicoの買い方やインストール、初期設定といった基本から、サーバー、電子工作、IoT、AIといったラズパイならではの活用方法まで、1冊でお届けします。 ラズパイをこれから始める方向けに、全36ページの入門マンガ「女子高生とラズベリーパイ」も巻末に掲載。これを読むだけでラズパイがどんなものなのか、すぐに分かって触れるようになります。

ハッカーの学校 IoTハッキングの教科書
生活にとけこみ、家電機器を便利にするIoT技術。 Webカメラなど、便利の裏側に潜むセキュリティの危険性をハッキングで検証。 専門家がパケットキャプチャからハードウェアハッキングまで、その攻撃と防御を徹底解説。 本書は2018年7月に刊行された「ハッカーの学校IoTハッキングの教科書」に一部修正を加えた第2版です。

攻撃手法を学んで防御せよ! 押さえておくべきIoTハッキング
本書は、経済産業省から2021年4月にリリースされた、IoTセキュリティを対象とした『機器のサイバーセキュリティ確保のためのセキュリティ検証の手引き』の『別冊2 機器メーカに向けた脅威分析及びセキュリティ検証の解説書』をもとに、IoT機器の開発者や品質保証の担当者が、攻撃者の視点に立ってセキュリティ検証を実践するための手法を、事例とともに詳細に解説しました。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

プログラマーは世界をどう見ているのか 西村博之著
イーロン・マスク(テスラ)、ジェフ・べゾス(Amazon)、ラリー・ペイジ(Google)…etc. 世界のトップはなぜプログラマーなのか?

ニーア オートマタ PLAY ARTS改 <ヨルハ 二号 B型 DX版> PVC製 塗装済み可動フィギュア
「NieR:Automata」より、ヨルハ二号B型こと2BがPLAY ARTS改に新たに登場! 高級感の感じられるコスチュームや髪の質感、洗練されたボディバランス、細かなデティールに至るまでこだわり抜かれた逸品。 DX版には通常版のラインナップに加え2Bの随行支援ユニット ポッド042などをはじめ“純白の美しい太刀"白の約定やエフェクトパーツ、自爆モードを再現できる換装用ボディパーツ、シーンに合わせて変えられる顔パーツ2種も付属する豪華な仕様に。 作中のあらゆるシーンを再現することが可能なファン必見の一品となっている。

Newtonライト2.0 ベイズ統計
ベイズ統計は,結果から原因を推定する統計学です。AIや医療などの幅広い分野で応用されています。その基礎となるのは18世紀に考えだされた「ベイズの定理」です。 この本では,ベイズ統計学のきほんをやさしく紹介していきます。

白光(HAKKO) ダイヤル式温度制御はんだ吸取器 ハンディタイプ FR301-81


無水エタノールP 500mlx2個パック(掃除)


ケイバ(KEIBA) マイクロニッパー MN-A04


サンハヤト SAD-101 ニューブレッドボード


白光(HAKKO) HEXSOL 巻はんだ 精密プリント基板用 150g FS402-02


[Amazon限定ブランド]【指定第2類医薬品】PHARMA CHOICE 解熱鎮痛薬 解熱鎮痛錠IP 100錠


Copyright © 2011-2024 Sarako Tsukiyono All rights reserved®.