Raspberry Pi 備忘録 / Mbedもあるよ!

Raspberry Pi であれこれやった事の記録

Raspberry pi 3 model B+ 用の poe hat を試す

Raspberry pi 3 model B+ 用の poe hat が届いたので試してみる

内容

f:id:pongsuke:20180911143749j:plain

組み立て

f:id:pongsuke:20180911143756j:plain

GPIO ピンは、埋まってしまった。

上からピンが刺さりそうにも見えるけど、どうなんだろうか?

使い方

おそらく、POE対応のハブなどから、LANケーブルを指すだけで良いのだろう。

使用した POE 対応 HUB

Amazon CAPTCHA

ちょっと調べたところ、 ケーブルは、カテゴリ 5E 以上なら POE に対応しているらしい。

動作

f:id:pongsuke:20180912125315j:plain

・・・ちゃんと動いた。

LANと給電がなされているので、これだけで動作する。

SSHからログイン等々、普通に使える。当たり前だけど、ちょっとした驚きがある。

5V 2.5A の給電能力があるらしい。

WEBカメラなどのUSBデバイスを接続しても、安定して動くのだろうか?

ニキシー管 IN-12B

ニキシー管 IN-12B を、光らせてみたい。

f:id:pongsuke:20180904130246j:plain

ニキシー管 IN-12B

f:id:pongsuke:20180830132521j:plain

ソケット

f:id:pongsuke:20180830132528j:plain

なくても良さそうですが、有ったほうが楽そうだと判断。

ドライバIC K155ID1

f:id:pongsuke:20180830132532j:plain

ニキシー管について

f:id:pongsuke:20180830155219j:plain

Indication current, Marking current とはなんだろう?

共通アノードに 180v 2.5mA を入れて、光らせたい数字に対応する端子を GND につなぐっぽい。
例えば、2につなぐと、0 が光るのかな?

んで、どれが 共通アノードなのか、、、です。

データシートが top view なのか bottom view なのか、よくわかりませんが、裏から見た際に、白くて矢印がついているのが、共通アノードでしょう。きっと。

なので、ソケットに繋ぐ際には、その白が 1 に刺さるようにします。

電源について

www.aitendo.com

200v 3mA が必要なので、そのままではなんともなりません。

とりあえず、昇圧DC-DCコンバーターキットを購入して、組み立てた。

f:id:pongsuke:20180904130300j:plain

電圧が高いし、電解コンデンサは向きを間違えると壊れたり爆発したりすると聞くし、、、通電させた際には、緊張しました。

怖かったので、とりあえず、安定化電源で 12v 0.5A を流し、テスターで電圧を見ながら半固定抵抗を回して、 195V としました。

その後、ニキシー管につないだところ、無事に光りました。

f:id:pongsuke:20180904130246j:plain

ただ、ニキシー管が思いの外発熱しており、正常な動作なのか不安になります。

Raspberry pi 3 Model B+ を USB SSD から起動する

f:id:pongsuke:20180816150408j:plain

いつの間にか、USB boot に対応していたようです。知りませんでした。

公式のガイド

www.raspberrypi.org

Rapberry pi 3 と書いてありますが、 3 B+ でもできました。

ポイント

  1. 不可逆的な変更が加わる
    USB Boot は、ONにしたら、OFFには戻せない。

  2. ファームウェアがある程度新しくないとダメ

  3. OTP (One Time Programmable) memory を設定する
    /boot/config.txtprogram_usb_boot_mode=1 を書き足して、rebootし、usb boot を ON にする

  4. 外部ストレージに、データを一式コピーする

  5. boot の際に読みに行くストレージを手動で書き換えること。

その他をまとめて、記事にしてくださっています。

jyn.jp

ファン付きのケース

f:id:pongsuke:20180816142437j:plain

Raspberry pi 3 は、熱を持ちやすいです。B+ に成って、更に熱を出しやすく成った気がします。

せっかくなので、熱暴走を防ぐために、ファン付きのケースに入れてみました。

Amazon CAPTCHA

どこに配線するか、、、ですが、選択肢は3つ。

  1. 常時給電の 5.0v
  2. 常時給電の 3.3v
  3. GPIO

必要なアンペアだとか、抵抗を挟むのが必要なのか調べるのが面倒なので、常時給電 3.3v につなぎました。

外付け HDD/SSD ケース

最終的にはこれに落ち着きました。

https://www.amazon.co.jp/gp/product/B01A56QMIC/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

給電は必須だと思います。

感想

やってみた実感としては、

出来上がったのは、安価で、物理的に壊れにくく、消費電力が少なく、GPIOがついている安物パソコンというイメージ。

RPIの弱点を克服できたと同時に、だんだんパソコンに近くなってきて、小ささやファンレスというメリトッが消えてしまった。

けど、不思議な満足感がある。

次は?

POE HAT が間もなく売り出されるようなので、手に入ったらとにかく試してみたい。

www.raspberrypi.org

POE対応のルーターは、すでに購入済み!

ADRSEZCO Raspberry Pi用端子台出力基板

ADRSEZCO Raspberry Pi用端子台出力基板 | Bit Trade One, LTD

f:id:pongsuke:20180524142943j:plain

f:id:pongsuke:20180524142948j:plain

ADRSEZCO Raspberry Pi用端子台出力基板 を買ってみました。

テスト中だけど、抜けてもらいたくないことは多い。

Raspberry pi Zero で オフィス環境の可視化 その5 AM2322 に交換

AM2320 もすぐに停止するので、 AM2322 に交換してみる。

f:id:pongsuke:20180219111131j:plain

WiringPi アップデート

久しぶりにログインしたので、

$ sudo apt-get update
$ sudo apt-get upgrade

してみたら、WiringPi がエラーを出して動かなかった。 不用意なアップデートは、本当に危険。

Unable to determine hardware version. I see: Hardware : BCM2835

最新バージョンの WiringPi をコンパイルし直したところ、正常に動きました。

$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

配線

f:id:pongsuke:20180219110941p:plain

・・・の前に、 ピンは1.27ミリピッチです。 とのことなので、ブレッドボードにさせるように、ピッチ変換基板を利用します。

SOP8(1.27mm)DIP変換基板 金フラッシュ (9枚入): パーツ一般 秋月電子通商 電子部品 ネット通販

f:id:pongsuke:20180219143034j:plain

f:id:pongsuke:20180228112008p:plainf:id:pongsuke:20180228112011j:plain

どうにかはんだ付けしましたが、汚い・・・。

足も切りすぎました。

pigpio をセットアップする

sudo apt-get install pigpio python-pigpio python3-pigpio

コーディング

こちらを使用しました。

rpi-location-monitor/AM2322.py at master · smartperson/rpi-location-monitor · GitHub

ただ、interface は 0 では無く、1 にしました。

$ ./AM2322.pigpio.py 
20.6 66.6
20.7 66.5
20.7 66.5
20.7 66.5
20.7 66.5
20.7 66.5
20.7 66.5

今度は、止まらないと良いのですが、、、。

FLiR Dev Kit を試す その5

せっかくなので、ストリーミングしたい。

f:id:pongsuke:20171211181007p:plain

そこで、今までは Mjepg-streamer などを使ってきましたが、自分でゴリゴリいじるので、Python で実装しているサンプルを探したところ、有った!

Simple Python Motion Jpeg (mjpeg server) from webcam. Using: OpenCV,BaseHTTPServer · GitHub

まずは、USBカメラなどをさして、ストリームのチェックを行う。

おっけー

f:id:pongsuke:20171211175152p:plain

Lepton 向けに改変する

これは、 Mr Igor のスクリプトを書き換えています。

Simple Python Motion Jpeg (mjpeg server) from webcam. Using: OpenCV,BaseHTTPServer · GitHub

これね。

#!/usr/bin/python
from pylepton import Lepton

import cv2
import numpy as np
from PIL import Image
import threading
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from SocketServer import ThreadingMixIn
import StringIO
import time

class CamHandler(BaseHTTPRequestHandler):
        def do_GET(self):
                if self.path.endswith('.mjpg'):
                        self.send_response(200)
                        self.send_header('Content-type','multipart/x-mixed-replace; boundary=--jpgboundary')
                        self.end_headers()
                        try:
                                with Lepton() as l:
                                        while True:
                                                data_buffer, rc = l.capture()
                                                if not rc:
                                                        continue

                                                cv2.normalize(data_buffer, data_buffer, 0, 255, cv2.NORM_MINMAX)
                                                img = cv2.cvtColor(data_buffer, cv2.COLOR_GRAY2BGR)
                                                img[:, :, 0:2] = 0
                                                img = cv2.resize(img, (320,240))

                                                imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
                                                jpg = Image.fromarray(np.uint8(np.asarray(imgRGB)))
                                                tmpFile = StringIO.StringIO()
                                                jpg.save(tmpFile,'JPEG')
                                                self.wfile.write("--jpgboundary")
                                                self.send_header('Content-type','image/jpeg')
                                                self.send_header('Content-length',str(tmpFile.len))
                                                self.end_headers()
                                                jpg.save(self.wfile,'JPEG')
                                                time.sleep(0.2)

                        except Exception as e:
                                print('Exception', e.args);
                                brak

                if self.path.endswith('.html'):
                        self.send_response(200)
                        self.send_header('Content-type','text/html')
                        self.end_headers()
                        self.wfile.write('<html><head></head><body>')
                        self.wfile.write('<img src="http://127.0.0.1:8080/cam.mjpg"/>')
                        self.wfile.write('</body></html>')
                        return


class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
        """Handle requests in a separate thread."""

def main():
        global img
        try:
                server = ThreadedHTTPServer(('localhost', 8080), CamHandler)
                print "server started"
                server.serve_forever()
        except KeyboardInterrupt:
                server.socket.close()

if __name__ == '__main__':
        main()

結果

f:id:pongsuke:20171211181007p:plain