SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|

2016-09-17(Sat) ラズベリーパイ3B(Raspbian)で電子工作を始める

  先日、PICマイコンの開発環境を整えたことだし、ラズベリーパイ側をイジり始める。現在、ウチにはラズベリーパイが4台(A, B,B+, 3B)あるが、B+は無線アクセスポイント、Bは無線コンバータとして、実用に供しているので、3Bで開発を行う。なお、3BのNOOBSではpidoraが選べなかったので、Raspbianが入っているが、まぁ、開発する限りでは似たようなもんだろう。

  自作してもよかったが、面倒くさいので秋月で買っておいた、ブレッドボード用の変換コネクタをセットして開発開始。

  画像の説明

  まずは、定番のLEDの点灯。GPIOの状態を確認するため、まずはgpioコマンドを一発。

user@raspberrypi:~ $ gpio readall
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5V      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |★
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+

  適当なポートを出力モードに切り替える。

user@raspberrypi:~ $ gpio -g mode 25 out
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | OUT  | GPIO. 6 | 6   | 25  |

  あとは、ポートの電圧を上げ下げするだけ。

user@raspberrypi:~ $ gpio -g write 25 1
user@raspberrypi:~ $ gpio -g write 25 0

  シェルスクリプトでLEDを点滅。こりゃ、お手軽じゃ。

user@raspberrypi:~ $ while true; do gpio -g write 25 1; sleep 0.5; gpio -g write 25 0; sleep 1; done

  次はシリアルポート、なのだが、どうもPi3からBluetoothとの兼ね合いで扱いが厄介らしい。とりあえず、GPIOの14番をシリアル送信モードに切り替えてみた。

root@raspberrypi:~# gpio -g mode 14 ALT0 
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |

  でもってraspi-configでシリアルを有効にしてみた。

root@raspberrypi:~# raspi-config 
9 Advanced Options
A7 Serial
<いいえ>
<了解>

  この作業は、結局、以下の記述と等価らしい。

root@raspberrypi:/boot# diff config.txt.org config.txt
> enable_uart=0
root@raspberrypi:/boot# diff cmdline.txt.org cmdline.txt
< dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
> dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

  再起動して「echo 'aaa' > /dev/ttyAMA0」してみたが、bashが100%になってプロセスストール。通信速度を変えてみる。

root@raspberrypi:~# stty speed 115200 < /dev/ttyAMA0 
115200
root@raspberrypi:~# stty -g < /dev/ttyAMA0 
0:4:1cb2:a30:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

  更に謎の設定を追加してみる。

root@raspberrypi:/boot# diff config.txt.org config.txt
59a60,61
> enable_uart=0
> dtoverlay=pi3-miniuart-bt

  再起動すると、/dev/ttyS0が現れた。「echo 'aaa' > /dev/ttyS0」してみたが、プロセスストールはしなくなったものの、出ない。

  config.txtを「enable_uart=1」を変更してみる。

root@raspberrypi:/boot# diff config.txt.org config.txt
> enable_uart=1
> dtoverlay=pi3-miniuart-bt

  再起動して「echo 'aaa' > /dev/ttyAMA0」すると、なにやらシリアルに反応が得られた。通信速度を合わせてやったところ、いつもの自作のserialDebugスクリプトによる受信に成功した。

  とりあえず、PICの学習リモコンでも操作できるようにしてみるかな。