いまどきのraspberry piは /etc/network/interfacesを使わない!!

ちょっとでもハマったら、書く。

私が持っている一番古いラズベリーパイ、B+かな。

今ではそれ対応のケースが売っていない。

SDカードがマイクロじゃない。

wifiがない。


何度か使ったがしばらく使っていなかったのでとりあえずwifiだけつなげとくか、
と触り始めたがつながらない。

まず、いつものようにルータのdhcpアドレス払い出し情報を見るが増えない。

あれー...

無線LANルータを最近変えたのでたぶん設定が古いのだろうとみると、
その通り。

直せばつながる... つながらない........

ifconfigするとwlan0が見えない。

おかしいなあと10分くらいたって、無線LANドングルを挿してないことに気づく。

そうそう、こいつは無線LAN持ってないんだ、えーとこの辺にあったよな....

机の上の箱に入っていたELECOMと書いてあるのを挿す。


lsusbで認識しているのを確認

.....つながらない


ググる。

/etc/network/interfaces に書くんだっけ....
いらなくなったんじゃなかったっけ....

書いてみるがダメ....

wpa_supplicant.conf

dhcpcd.conf

を見直し、普段書かない設定も書いてみる。

ダメ.....



もしかしてこのドングル使えないんじゃ....

違うのを挿す.....「Buffalo」.....

つながった!

ちなみに私はraspberry piは全部家の無線につなぎ固定IPにしている。

結論、/etc/network/interfaces は使わない!
コメントにも dhcpcd.confを使えみたいなことが書いてある!

wifiをつなぐには wpa_supplicant.conf だけ書けばよい!

固定IPにするときは dhcpcd.conf に書く!
dhcpならdhcpと書けばよいと思う!


/etc/network/interfaces は下記のように何も書いてなくてよい!
----------------------
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
----------------------


無線LANドングルは使えるやつを挿せば何もしなくても認識する!

....

調べたら最初に挿したのは WDC-433SU2M2BK 
wifiのやつだ。

https://www.elecom.co.jp/products/WDC-433SU2M2BK.html

「5GHz専用」と書いてある。そのせいかな?


使えたのは buffaloの、型番らしきものが見当たらないのだが
たぶん WLI-UC-GNME 

https://www.buffalo.jp/product/detail/wli-uc-gnme.html


ついでなのでraspberri pi の型番を確認しておく

cat /proc/cpuinfo  | grep Revision

https://elinux.org/RPi_HardwareHistory
を参照

私のは 000e だった。

Raspberry Pi 1 Model B

だ。


の表でもストレージがSDカードになっているから、間違いないだろう。



OSは新しい。最後に入れたのは今年のはず。

$ cat /etc/debian_version
10.2

$ cat /etc/issue
Raspbian GNU/Linux 10 \n \l



aitendoのLEDランプキット AKIT-0118

aitendoで買ったLEDランプキットを作った。
税別295円。
これくらいならすぐ作れるだろうと思って買ったがずっと放置していたものだ。

部品は、LED8個、マイクロインダクタ1個、定電圧LEDドライバ1個
そして基盤、電源接続用のコード2本

今は「K-8LED004F」という名前になっているようだ。
http://www.aitendo.com/product/6928

基盤に部品をさしてはんだ付けするだけだろ、と思っていたが、
よく見ると基盤の部品間の接続がない。

小さい基盤なので、部品の足を折ってつないだ。

電池ボックスはついていない。
前に買ってあったもの。



単三電池2本で点灯する。
写真だと青っぽいが実際は白だ。




低電圧LEDドライバはトランジスタのような見た目である。
低電圧(3V)でたくさん(8個)のLEDを点灯させることのできる部品だそうだ。
http://www.aitendo.com/product/16776

マイクロインダクタはこの低電圧LEDドライバを使うのに必要である。

インダクタは以前ラジオを作ったときに使ったことがあるが、
見た目は抵抗のようだが実体はコイルである。
電流を蓄える役割があるようなのだが、今回の回路での必要性はよくわからない。

raspberry pi zero wは 2.4GHzにしか対応していない

やっぱラズパイはzeroだよね。
当然w。無線対応。

ネットワークにつながらないpiなんて.....

2個目のpi zero wをセットアップした。

以前etcherではうまくいかなかったのだが、今は問題ない。

imageをSDに書き込むと、windowsで認識されなくなった。
(フォーマットしなさい、となる)

が、SDをいったん「取り外し」て、再度挿すと認識される。

wpa_supplicant.confをwindows上で作ってSDに置く方法をとった。

フレッツのルータでDHCPクライアント情報を見るが増えない。

つながってない...

しかたがないのでキーボードマウスディスプレイをつなぐ。

/etc/network/interfacesとか /etc/dhcpcd.confとかいじってみる。

wpa_supplicant.confに country=JP を入れてみる...

windowsで作った wpa_supplicant.confは行末に ^M がついているので消す...

が、つながらない。


すでにつながっているzero wの設定を見る。

パスワードが平文で書いてある... でも別にそれは関係ないよな...

でもつながっているので設定を同じにしようと見ていたら、

SSIDが 2.4GHzのものになっていた。

そうだ、zero wの無線は2.4GHzにしか対応していなかったのだ!

/etc/network/interfaces とか dhcpcd.confとか country=JPとか関係ない。

wpa_supplicant.confさえちゃんと書けば、zero wの無線はつながる。





LCDのバックライトを点灯する

AQM0802にはバックライトがついている。

値札に記載の商品名にも「バックライト付」と書いてあった。

バックライトのon/offはGPIO4をon/offすればよい。

GPIO4というのはピン番号でいうと3である。

GPIOをon/offするのは以前LEDを点灯させるときにやったので、
その時に作ったスクリプトを元に作った。

---
import RPi.GPIO as GPIO
import sys

x = int(sys.argv[1])

GPIO.setmode(GPIO.BCM)

GPIO.setup(4, GPIO.OUT)

if (x>0):
        print('back light on')
        GPIO.output(4, True)
else:
        print('back light off')
        GPIO.output(4, False)
        GPIO.cleanup()
---

引数に0を指定するとオフ、1(0より大きい)だとオン

バックライトが光った!



GPIO.cleanupを実行するとバックライトが消えてしまうので、
オンにするときはcleanupしない。

すると、オフにするときに以下のようなwarningが出る。

backlight.py:9: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.

warningを消す方法が書いてあるくらいだから、気にしなくていいか。

Raspberry Pi zeroでLCDディスプレイに文字を表示する

秋葉原に行って、秋月電子でRaspberry pi用のキャラクタLCDキットを買ってきた。

800何十円だった。

I2C液晶は AQM0802Aというもので8文字 x 2列表示できる。

それをラズパイに接続させるための変換基盤(PCA9515)と、ピンヘッダにさすためのソケットがついていて、液晶とソケットをはんだ付けする。

私ははんだ付けはあまりしないのでヘタクソで不安だったので、
WEBで調べたが簡単なので説明すらされていなかった。

案の定、液晶を基盤に接続するときに隣合ったピンがくっついてしまった。

くっついたところは半田をあたためながら楊枝でなんとか切り離した。


piはzeroを使った。

まず、raspi-configで

5 Interfacing Options
P5 I2C を選んでenableにする。

i2cdetectというコマンドで認識しているか確認するのだが
インストールされていなかったので

sudo apt-get install i2c-tools


はんだ付けしたソケットをpiのGPIOに挿す。

GPIOの1,3,5,7,9,11 を使う。

SDカードがある側を上にして、左の列の上から6本だ。

ちなみに基盤の各ピンに対応する箇所には以下のように書かれている

1: 3V3
3: SDA
5: SCL
7: LED
9: GND
11: RST

sudo i2cdetect -y 1

以下のような内容であれば正常だそうだ。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 


これで使用できる状態なので早速なにか表示したいが、
WEBを探すとスクリプトが紹介されていたので、
IPアドレスとか任意の文字列を表示させてみた。

スクリプトではコマンド実行結果を加工したり任意の文字列をコマンドにわたせる型に変換したりしているのだが、
コマンドそのものの使い方を調べてみた。

Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x03 - 0x77)
  MODE is one of:
    c (byte, no value)
    b (byte data, default)
    w (word data)
    i (I2C block data)
    s (SMBus block data)
    Append p for SMBus PEC


まず初期化する。
以下2行がお決まりの初期化コマンドのようだ。

sudo i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i

0x3e というのが書き込み対象(I2CBUS)、i2cdetectで表示されていた値だ。

 i は「block data」、連続してデータを書き込む指定である。

文字コードは下記に記載がある。
http://akizukidenshi.com/download/ds/xiamen/AQM0802.pdf


#全部消して1行目の最初にカーソル移動
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i

#指定したデータを連続して表示
 sudo i2cset -y 1 0x3e 0x40 [data1] [data2] [data3]  i

#改行してカーソルを先頭に移動
sudo i2cset -y 1 0x3e 0x00 0xc0 i

8文字入力したらコマンドで改行しないと折り返さない。

#「Hello」と表示
sudo i2cset -y 1 0x3e 0x40 0x48 0x65 0x6c 0x6c 0x6f  i

#「トウキョウ」と表示
sudo i2cset -y 1 0x3e 0x40 0xc4 0xb3 0xb7 0xae 0xb3  i