HOME | Raspberry Pi | ビジネス書籍紹介 | 2021-09-19 (Sun) Today's Access : 105 Total : 354099. Since 10 Sep. 2019

RaspberryPiとArduinoを連携する【USBシリアル】
2019.12.26

YouTube 動画でポイントを説明しています。
上記画像をクリックすると再生できます。

今回は、PlatformIOを用いて、Arduiono の開発環境を構築します。 PlatformIOは、ESP32やArduinoなど、様々な組込みデバイスを対象とした統合開発環境です.

構成図では、Raspberry Pi Zero W に Raspbian Stretch Lite をインストールしてあります。 Zero は Wifi経由で、SSH接続によりパソコンから制御しています。

ちょっとしたシールドのテストであれば、Arduino Nano をブレッドボードに挿して、Raspberry Pi Zero WとUSB接続して、 シリアル通信すれば足りてしまいます。


■pythonのインストール
まずは、python3-pip をインストールします。pip は、Pythonパッケージのインストールなどを行うユーティリティです。
$ sudo apt install python3-pip
$ pip3 --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.5)
■platformioをインストール
$ sudo pip3 install -U platformio
※platformioインストール時に短縮コマンドとしてpioも設定されます。

$ platformio --version
This system supports the C.UTF-8 locale which is recommended.
You might be able to resolve your issue by exporting the
following environment variables:

    export LC_ALL=C.UTF-8
    export LANG=C.UTF-8
上記のようなエラーが発生した場合には、現在のロケール確認します
$ locale
LANG=
LANGUAGE=
.........
対応しているロケール一覧を表示します
$ locale -a
C
C.UTF-8
POSIX
en_GB.utf8
$ sudo raspi-config
4.Locatisation Options
  → I1 Change Locale
  → ja_JP.UTF-8 UTF-8
  → ja_JP.UTF-8
  

Generating locales (this might take a while)...
  en_GB.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.
再度、ロケール一覧を表示します
$ locale -a
C
C.UTF-8
POSIX
en_GB.utf8
ja_JP.utf8
設定を反映させます
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"

確認します
$ cat /etc/default/locale
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP:ja
ログインし直します
$ locale (あるいは $ localectl status)
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP:ja
....
$ platformio --version
PlatformIO, version 4.1.0
■platformioのPATH の確認

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/usr/local/games:/usr/games

$ which platformio
/usr/local/bin/platformio

PATHが通っていない場合は
$ echo 'export PATH=${PATH}:/usr/local/bin' >> ~/.bashrc

■udevの設定 (Ubuntuのみ)

dialoutグループに自分を追加します。
$ cat /etc/group | grep dialout
dialout:x:20:pi

$ sudo usermod -a -G dialout ${USER}
※Raspbianの場合、ユーザ pi は既に含まれているので、実際には必要ありません

■udev rulesの設定

platformioが、動的にデバイスを管理するために、ルールファイルを追加します。

$ cd /etc/udev/rules.d
$ ls
99-com.rules

$ sudo wget https://raw.githubusercontent.com/platformio/platformio-core/develop/scripts/99-platformio-udev.rules

$ ls
99-com.rules 99-platformio-udev.rules

$ sudo udevadm control --reload-rules

■利用できるボードの確認

$ platformio boards

$ platformio boards "arduino uno" ← 絞り込みたい場合
Platform: atmelavr
---------------------------------------------------------------------
ID                 MCU          Frequency  Flash   RAM    Name
---------------------------------------------------------------------
uno                ATMEGA328P   16MHz     31.50KB 2KB    Arduino Uno
$ platformio boards "arduino nano"
Platform: atmelavr
----------------------------------------------------------------------
ID                 MCU        Freq.  Flash RAM  Name
----------------------------------------------------------------------
nanoatmega168      ATMEGA168  16MHz  14KB  1KB  Arduino Nano ATmega168
nanoatmega328      ATMEGA328P 16MHz  30KB  2KB  Arduino Nano ATmega328
nanoatmega328new   ATMEGA328P 16MHz  30KB  2KB  Arduino Nano ATmega328
                                                  (New Bootloader)
$ platformio boards "Leonard"
Platform: atmelavr
---------------------------------------------------------------------
ID               MCU        Freq.  Flash  RAM    Name
---------------------------------------------------------------------
leonardo         ATMEGA32U4 16MHz  28KB   2.50KB Arduino Leonardo
leonardoeth      ATMEGA32U4 16MHz  28KB   2.50KB Arduino Leonardo ETH

Arduino Nano と Raspberry Pi Zero W をUSB接続します。

■シリアルデバイスの確認
$ platformio device list
/dev/ttyUSB0
------------
Hardware ID: USB VID:PID=1A86:7523 LOCATION=1-1
Description: USB2.0-Serial

/dev/ttyAMA0
------------
Hardware ID: 20201000.serial
Description: ttyAMA0
Arduino Nano が /dev/ttyUSB0 として認識されているのがわかります。

■プロジェクトの作成
$ mkdir -p /home/pi/Arduino/sample
$ cd /home/pi/Arduino/sample

$ platformio init

/home/pi/Arduino/sample
                   ├── .gitignore
                   ├── .travis.yml
                   ├── include/
                   ├── lib/
                   ├── platformio.ini
                   ├── src/
                   └── test/

$ cat platformio.ini

;PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
オプションを付けずに init コマンドを実行すると platformio.ini には実際の設定は追加されません。
Arduino Nano を指定して実行してみます。
$ platformio init -b nanoatmega328

$ cat platformio.ini

;PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:nanoatmega328]
framework = arduino
board = nanoatmega328
platform = atmelavr
Arduino Uno を指定して実行してみます。
$ platformio init -b uno

$ cat platformio.ini

;PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:nanoatmega328]
framework = arduino
board = nanoatmega328
platform = atmelavr

[env:uno]
platform = atmelavr
framework = arduino
board = uno
■L チカ・プログラム
$ vi src/led.ino
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
ino ファイル名は、プロジェクトディレクトリ名と一致する必要はありません。
ただし、複数のinoファイルをsrcディレクトリに配置した際、void setup()関数が複数存在すると、ビルド時にエラーになります。
/home/pi/Arduino/sample/src/SerialMonitor.ino: In function 'void setup()':
/home/pi/Arduino/sample/src/SerialMonitor.ino:2:6: error: redefinition of 'void setup()'

$ platformio run
Processing nanoatmega328 (framework: arduino; board: nanoatmega328; platform: atmelavr)
.....
Processing uno (platform: atmelavr; framework: arduino; board: uno)
.....
Environment Status Duration
------------- -------- ------------
nanoatmega328 SUCCESS 00:00:38.913
uno SUCCESS 00:00:35.662

Nano と Uno に対して、それぞれビルドが実行されます。 特定の環境だけビルドしたい場合は -e オプションで指定します。

$ platformio run -e nanoatmega328
Processing nanoatmega328 (framework: arduino; board: nanoatmega328; platform: atmelavr)
.....
Environment Status Duration
------------- -------- ------------
nanoatmega328 SUCCESS 00:00:20.188
uno IGNORED

環境を指定しないで run コマンドを実行した時のデフォルトの環境を platfromio.ini で指定できます。

$ vi platformio.ini
[platformio]
default_envs=nanoatmega328

■アップロード

$ platformio run -e nanoatmega328 -t upload

複数の環境定義を列記してある場合に、環境指定を行わないで、アップロードしようとすると、 該当する環境(ここではnanoatmega328)はアップロードされますが、接続されていない Uno に関してはエラーとなります。

$ platformio run -t upload

Processing nanoatmega328 (framework: arduino; board: nanoatmega328; platform: atmelavr)
.....
avrdude done. Thank you.
========== [SUCCESS] Took 38.59 seconds ==========

Processing uno (platform: atmelavr; framework: arduino; board: uno)
....
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
.......


LEDが光ります(写真向かって一番左のLED)。

備考:Arduinoボード インジケーター
L:「DIGITAL 13番PIN」から電圧が出力されているときに点灯
TX:トランミッション、つまりデータを送信しているときに光る
RX:レセプション、つまりデータを受信しているときに光る

■ライブラリーを利用する


温湿度センサーDHT11を使用して「温度、湿度、体感温度」を取得します。

$ mkdir -p /home/pi/Arduino/dht11
$ cd /home/pi/Arduino/dht11

$ platformio init -b nanoatmega328
$ vi src/dht11.ino

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHT11 test!"));

  dht.begin();
}

void loop() {
  delay(2000);

  float humidity    = dht.readHumidity();
  float temperature = dht.readTemperature();
  float heatIndex   = dht.computeHeatIndex(temperature, humidity, false);
  if (isnan(humidity) || isnan(temperature) || isnan(heatIndex)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Serial.print("Humidity:");
  Serial.print(humidity);
  Serial.print("%  Temperature:");
  Serial.print(temperature);
  Serial.print("°C Heat index:");
  Serial.print(heatIndex);
  Serial.println("°C");
}
DHT系の専用ライブラリを使用しています
https://github.com/adafruit/DHT-sensor-library

$ platformio run
/home/pi/Arduino/dht11/src/dht11.ino:1:17: fatal error: DHT.h: No such file or directory

*************************************************************
* Looking for DHT.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:DHT.h"
* Web > https://platformio.org/lib/search?query=header:DHT.h
*
*************************************************************

DHT.h がないので、エラーとなりますが、親切にライブラリの探し方を教えてくれてます。

■ライブラリのインストール

$ platformio lib search "header:DHT.h"
Found 16 libraries:

DHT sensor library
==================
#ID: 19
Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors

Keywords: sensors
Compatible frameworks: Arduino
Compatible platforms: Atmel AVR, Atmel SAM, Espressif 32, Espressif 8266, GigaDevice GD32V, Infineon XMC, Intel ARC32, Kendryte K210, Microchip PIC32, Nordic nRF51, Nordic nRF52, ST STM32, ST STM8, Teensy, TI MSP430
Authors: Adafruit
......

16個のライブラリーが登録されていて、一番最初に見つかりました。
表示されているIDを用いて、さらに詳しい情報を確認してみます。
$ platformio lib show 19
.....
ライブラリーをインストールします。
$ platformio lib install 19
Library Storage: /home/pi/Arduino/dht11/.pio/libdeps/nanoatmega328
LibraryManager: Installing id=19
DHT sensor library @ 1.3.8 has been successfully installed!
ライブラリーのホルダーが生成されています。
$ ls /home/pi/Arduino/dht11/.pio/libdeps/nanoatmega328
DHT sensor library_ID19

フォルダーの中を見てみます。
$ ls -al "/home/pi/Arduino/dht11/.pio/libdeps/nanoatmega328/DHT sensor library_ID19"
drwx------ 4 pi pi 4096 12月 20 20:39 .
drwxr-xr-x 3 pi pi 4096 12月 20 20:39 ..
drwxrwxr-x 2 pi pi 4096 12月 20 20:39 .github
-rw-rw-r-- 1 pi pi 67 11月 3 15:00 .gitignore
-rw-rw-r-- 1 pi pi 1144 11月 3 15:00 .library.json
-rw-rw-r-- 1 pi pi 679 11月 3 15:00 .travis.yml
-rw-rw-r-- 1 pi pi 1288 11月 3 15:00 CONTRIBUTING.md
-rw-rw-r-- 1 pi pi 11765 11月 3 15:00 DHT.cpp
-rw-rw-r-- 1 pi pi 2519 11月 3 15:00 DHT.h
-rw-rw-r-- 1 pi pi 6733 11月 3 15:00 DHT_U.cpp
-rw-rw-r-- 1 pi pi 3078 11月 3 15:00 DHT_U.h
-rw-rw-r-- 1 pi pi 4705 11月 3 15:00 README.md
drwxrwxr-x 4 pi pi 4096 12月 20 20:39 examples
-rw-rw-r-- 1 pi pi 529 11月 3 15:00 keywords.txt
-rw-rw-r-- 1 pi pi 353 11月 3 15:00 library.properties

環境設定ファイルにライブラリーを指定します。
$ vi platformio.ini
[env:nanoatmega328]
platform = atmelavr
framework = arduino
board = nanoatmega328
lib_deps =
  19
$ platformio run

.pio/libdeps/nanoatmega328/DHT sensor library_ID19/DHT_U.h:36:29: fatal error: Adafruit_Sensor.h: No such file or directory

*************************************************************
* Looking for Adafruit_Sensor.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:Adafruit_Sensor.h"
* Web > https://platformio.org/lib/search?query=header:Adafruit_Sensor.h
*
*************************************************************

再度、ビルドを実行してみると、今度はDHTライブラリーが参照しているヘッダーファイルがないためにエラーになります。
同様にライブラリーを検索して、インストール、環境設定ファイルにライブラリーを追記します。

$ platformio lib search "header:Adafruit_Sensor.h"

Found 12 libraries:

Adafruit Unified Sensor
=======================
#ID: 31
Required for all Adafruit Unified Sensor based libraries.

Keywords: sensors
Compatible frameworks: Arduino
Compatible platforms: Atmel AVR, Atmel SAM, Espressif 32, Espressif 8266, Intel ARC32, Microchip PIC32, Nordic nRF51, Nordic nRF52, ST STM32, ST STM8, Teensy, TI MSP430
Authors: Adafruit
......
$ platformio lib install 31

Library Storage: /home/pi/Arduino/dht11/.pio/libdeps/nanoatmega328
LibraryManager: Installing id=31
Downloading  [####################################]  100%
Adafruit Unified Sensor @ 1.0.3 has been successfully installed!

$ vi platformio.ini
[env:nanoatmega328]
platform = atmelavr
framework = arduino
board = nanoatmega328
lib_deps =
  19
  31

複数のライブラリを指定する場合はライブラリごとに改行して記述します
$ platformio run -e nanoatmega328 -t upload

■platformio シリアルモニター
$ platformio device monitor -p /dev/ttyUSB0 -b 9600
--- Miniterm on /dev/ttyUSB0  9600,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
DHT11 test!
Humidity:40.00%  Temperature:21.60°C Heat index:16.73°C
Humidity:40.00%  Temperature:21.60°C Heat index:16.73°C
使用しているポートが1つの場合は、ポート指定をしなくても動くようですが、
$ platformio device monitor -b 9600
接続しているシリアルボートを確認して
$ platformio device list
明示的にポート指定したほうがよいと思います。
$ platformio device monitor -p /dev/ttyUSB0 -b 9600

■ライブラリーを削除する
$ platformio lib uninstall 19
Uninstalling DHT sensor library @ 1.3.8:        [OK]
■ビルドオプションを指定する
ESP8266はTCP/IPスタックとマイクロコントローラを備えたWi-Fiモジュールです。

https://github.com/itead/ITEADLIB_Arduino_WeeESP8266
ESP8266.h

たとえば ESP8266 というライブラリはソフトウェアシリアルを利用できますが、利用するにはマクロで ESP8266_USE_SOFTWARE_SERIAL という値が定義されていなければなりません。
#ifdef ESP8266_USE_SOFTWARE_SERIAL
    ESP8266(SoftwareSerial &uart, uint32_t baud = 9600);
#else /* HardwareSerial */
    ESP8266(HardwareSerial &uart, uint32_t baud = 9600);
#endif
このようなばあいには build_flags を使ってコンパイラにオプションを渡すことができます。
$ vi platformio.ini

[env:uno]
platform = atmelavr
board = uno
framework = arduino
lib_deps =
  ESP8266
build_flags = -D ESP8266_USE_SOFTWARE_SERIAL
これで ESP8266 に SoftwareSerial を渡すことができるようになります。

■共通変数の設定

任意の共通セクション名を用意して、各セクションが参照するようにします。
$ vi platformio.ini

[common]
lib_deps =
  19
  31
build_flags = -D ESP8266_USE_SOFTWARE_SERIAL

[env:nanoatmega328]
platform    = atmelavr
board       = nanoatmega328
framework   = arduino
build_flags = ${common.build_flags}
lib_deps    = ${common.lib_deps}

[env:uno]
platform    = atmelavr
board       = uno
framework   = arduino
build_flags = ${common.build_flags}
lib_deps    = ${common.lib_deps}
■基本コマンド
platformio update                  パッケージのアップロード
platformio upgrade                 パッケージのアップグレード
platformio boards                  ボード一覧表示
platformio init --board=<ボード名> プロジェクト作成
platformio run                     ビルド
platformio run --target=upload     ビルドとアップロード
platformio run --target=clean      クリーン
platformio device list            	シリアルポート一覧表示
platformio device monitor -p <デバイス> -b <ボーレート>	シリアルモニタ
 Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2019.12.19 ファイル共有 dokany + Win-sshfs
2019.12.26 Arduino開発環境構築 PlatformIO


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

DIPスイッチで動作電圧を3.3Vと5Vに切り替えられるUNO互換ボード
KEYESTUDIO Plus Board for Arduino UNO R3 with Type-C USB Cable, 3.3V 5V 1.5A Output Current, More Powerful Controller Board USB-シリアルチップ:CP2102 / 動作電圧:5Vまたは3.3V(DIPスイッチ制御)/ 外部電源:DC 6-15V(9V推奨)/ デジタルI / Oピン:14(D0〜D13)/ PWMチャネル:6(D3 D5 D6 D9 D10 D11)/ アナログ入力チャネル(ADC):8(A0-A7)/ DC出力機能の各I / Oポート:20 mA / 3.3Vポートの出力能力:50 mA / フラッシュメモリ:32 KB(うち0.5 KBはブートローダーによって使用されます)/ SRAM:2 KB(ATMEGA328P-AU)/ EEPROM:1 KB(ATMEGA328P-AU)/ クロック速度:16MHz / オンボードLEDピン:D13

エレクトロクッキー Leonardo R3 ATmega32u4 ボード DIY Arduino工作用 - ピンクエディション


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

Interface 2021年10月号
☆特集:~ 格好良さアップ! 機能&信頼性アップ ! ~「 3Dプリンタ & メカ設計入門 」
☆特集2:Pico達人への道…「 C/C++でMicroPython拡張 」


トランジスタ技術 2021年9月号
☆特集:~ 直流・交流・非接触・センサ微小電流の測定ノウハウ ~「電流を正しく測る技術」

トランジスタ技術スペシャル 2021年7月号 宇宙ロケット開発入門
これから開発・活用が進むと期待されている宇宙空間への交通・物流インフラとして、小型・低価格ロケットが注目を集めています。本書では、基本構造から制御メカニズムまで、小型宇宙ロケット開発の基礎知識を実例を交えて解説します。

日経Linux 2021年9月号
【特集1】おうち時間をLinuxデスクトップで楽しむ! Linux環境を作るワザ
【特集2】徹底図解で丸わかり! 「WSL2」入門   Windows 11の新機能を速報!
【特集3】IT自動化ツール AnsibleでWeb導入を自動化
【特集4】ラズパイで楽しむLinuxライフ 「今、会議中」と家族に伝えるプレートをPythonで作ろう


ラズパイマガジン2021年秋号
特集1 サクッと動くパーツ&ライブラリ総覧
特集2 ArduinoライブラリでラズパイPicoを動かす
特集3 古いラズパイをフル活用! Node-REDで 楽しい電子工作
特集4 空気の汚れをラズパイで検知しよう
特集5 ラズパイで楽しむLinuxライフ
特集6 NVIDIAのAIボードが6000円台に!
特集7 M5StickCで始める電子工作 iPhoneからサーボモーターを制御しよう


トランジスタ技術スペシャル 2021年 4月号 No.154「達人への道 電子回路のツボ」
初学者が実用的な電子回路を設計できるようになるためのポイントをまとめました。学校の教科書だけではつかめない基本電子回路やOPアンプ/トランジスタの使い方の実際を、いろいろな視点から解説しています。


Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品
【仕様概要】CPU:ARM 1.2GHz 4コア、GPU:2コア 3D・動画支援、RAM:1GB、ネットワーク:LAN/Wi-Fi/Bluetooth、インターフェース:USB/HDMI/オーディオ/GPIO(UART/I2C/I2S/SPI...)。

ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換 (3)


ESPr Developer 32
スイッチサイエンス(Switch Science)

協和ハーモネット UL1007 AWG24 耐熱ビニル絶縁電線 リール巻 100m 黒


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


サンハヤト TTW-203 テストワイヤ
ブレッドボードとスルーホール間の接続に便利なワイヤですブレッドボード用のオスピンと基板のスルーホール用のバネ性のある端子を組み合わせたテストワイヤです

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


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


熱収縮チューブφ1.5
印字無しで綺麗☆ シュリンクチューブ 絶縁チューブ 防水 高難燃性 収縮チューブ (2m, ブラック(黒))


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


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


【Amazon.co.jp限定】エーモン 電工ペンチ 全長約255mm (1452)


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


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