「覚書」カテゴリーアーカイブ

RaspberryPi UPS 導入

久々の投稿です。

Raspberry Piリチウム電池の拡張ボードを購入しました。
Amazonで2497円でした。
RaspberryPiに導入した時の覚書です。
※RaspberryPiへの電源接続は簡単なので省略、UART接続したときの覚書です。

参考サイト
RPi UPSPack V3 Product User Guide
Raspberry Pi GPIOを使用したシリアル通信

1. UPSのRX、TX端子をRaspberry Pi のGPIO15(UART RX)、GPIO14(UART TX)へ接続 ※参考サイト①の通り。端子のはんだ付けが必要。
2. Raspberry Pi のシリアル通信を有効化
 - Linuxシリアルコンソールを無効化する
– UART0をPrimary UART に設定する( /boot/config.txt に dtoverlay=disable-bt を追加)
 ※参考サイト②「GPIOヘッダーのUARTピンでUART0を使用する方法」
3. 再起動後、以下のスクリプトを実行
upspackv2.py
上位互換性があるみたいで、V2向けのものでも動く模様

※嵌った点
 UART通信がたまにうまくできず、UPSからのデータが文字化けするときがある。その時はUPSの電源をOFF→ONすると復帰する。

これを使ってソーラー発電による無電源化ができないか挑戦中です。
できたらYoutubeに上げようかと思っています。

Raspberry pi CAN 通信 プログラム

RS485_CAN_HAT でCAN通信できるようになりました。
python-can を使っているのですが、記事自体は別サイトでも情報が少ないため、役に立てればと思い記事に残します。
Python初心者なので、間違っている可能性があります。

import os
import threading
import can
import time

# CANリソース設定
os.system('sudo ip link set can0 type can bitrate 500000')
os.system('sudo ifconfig can0 up')

FIL_CANID   = 0xXXXXXXXX
FIL_CANMSK  = 0xXXXXXXXX
REQ_CANID  = 0xXXXXXXXX
ID_FORMAT  = True #29bitCANIDの場合

# CAN設定、フィルタ設定
can0 = can.Bus(channel = 'can0', can_filters = [{'can_id': FIL_CANID, 'can_mask': FIL_CANMSK }], bustype = 'socketcan_ctypes')# socketcan_native
canlog = can.ASCWriter('/home/pi/public/canlog.asc')
can.Notifier(can0, [canlog, ])

# 送信データは外部ファイルにしたい
def ServiceTest():

    #テストフレーム送信
    msg0 = can.Message(arbitration_id=REQ_CANID, data=[1, 3, 0, 0, 0, 0, 0, 0], extended_id=ID_FORMAT)
    canlog.log_event(msg0, time.time())
    can0.send(msg0)


# main関数
if __name__ == '__main__':
    t1 = threading.Thread(target=ServiceTest)
    
    # 送信プロセススタート
    t1.start()

    # 送信プロセスが完了するのを待つ
    t1.join()

    canlog.stop()
    can0.shutdown()
    os.system('sudo ifconfig can0 down')
    print('end')

※ 記事ように、一部カスタマイズしています。
実行すると、CANID、MASKに合致した受信メッセージのみcanlog.ascに出力されます。
また、canlog.log_event()にて送信メッセージもログ出力されるようになります。

RaspberryPiでCAN通信

RaspberryPiでCAN通信ができることを知り、実際にやってみました。
ネット上で上であまり情報がないRS485_CAN_HATを購入し、車につなげて通信できたので覚書。

マニュアルが付いていなかったので、以下のサイトを参照した。
https://www.waveshare.com/wiki/RS485_CAN_HAT

① UserManual を参考にRaspberryにインストール
② DemoCodeをベースに車に接続できるようにビットレートを500kbpsに修正
③ 自己診断用のリクエストメッセージを投げて、応答を見てみる。

車に接続用にコネクタを買ったり、CANID、メッセージを調べたりしていますが、それ以外は簡単でした。
あ、あとPython初めて扱ったのでそれも少し頑張ったかも。

詳細は別途投稿するかもしれないです。

PS4 iPhoneでリモートプレイ

最近PS4 srimを購入し、iPhoneでリモートプレイできることを知り、苦節あり、外出先で接続できるようになったので、覚書。

アプリはPlayMiraを使用。
以下、下準備
① PS4本体にリモートプレイできるように設定する
② ルーターのポートフォワーディングを設定
TCP:9295
UDP:987、9296、9297
※UDP:987を設定し忘れがち。PS4公式ページに記載はなく
PlayMiraアプリ内のヘルプに記述されていた。
PS4起動中は外出先からアクセスできるのに、
スタンバイモードからのアクセスができない場合は、
987ポートが開いていないか確認すること。

あとは、自宅のグローバルIPをアプリに設定し、
FreeWifiから接続する。
※LTEからでも接続できるみたいですが、容量オーバーで回線速度が遅く今回は接続できませんでした。

↓な感じでプレイできます。

ps4_iphone

サーバーの不安定問題について

今回不安定だったサーバについてある程度収束したので、
まとめておきます。

サーバー不安定になった時期:2月初頭
現象:データベース接続不可(メモリリークによりmysqlがおちる)
原因(推測):外部からのwebサーバへ攻撃
Webサーバプロセスが同時にたちあがり、サーバに負荷がかかっていた。
対策:IPアドレスでアクセスした際のデフォルトページをブログ→ダミーページへ

本当はもっと適した方法があると思っていますが、素人のわたしにはこれが限界。

これでよくなれば、いいのな。

【覚書】複数のWebサイトを公開する「nginx」+「apache2」

我がRaspberryPiサーバはこのブログ以外に複数のWebサイトを公開しています。
バーチャルホストで運用しているのですが、その覚書です。

「nginx」(リバースプロキシサーバとして使用)と「apache2」(Webサーバとして使用)で構築しています。

1.「apache2」に複数のWebサーバを設定し、それぞれ異なるポート番号を設定しておく(ポート番号80以外)
2.「nginx」で、受信したホスト名に対し、1.で設定したポート番号に割り当てる設定をする。

言葉で書くと簡単です。
設定方法は他のサイトにたくさん記事があるため、省略します。
また、他の実現方法もたくさんあるみたいです。

思い出せるきっかけになればと残しました。

【覚書】RaspberryPi でDDNSを使う(No-ip)

自宅サーバを公開するためにダイナミックDNSサービスを利用していますが、
IPが更新されるごとに、ダイナミックDNSサービスにIPを手動で更新しに行くのはめんどいですよね。

以下の記事がが役に立ちました。
Linux(Raspbian)でダイナミックDNSを使う

no-ip限定になりますが、Lunux用の「Dynamic DNS Update Client」が公開されています。
自分でコンパイルが必要ですが、RasPiを触るまではLinuxの”L”の字すら知らなかった私でもなんとかできたため、
Webサーバ、Lunux初心者でも対応できると思います。

また、このクライアントソフトはIP変化検出をできないため、cronで定期処理に登録する必要があります。