パソコン同士でのデーターの受け渡しを考えてみる(なんちゃってパソコン通信)
ども副部長です!!
SQLは現在勉強中なので、仕上がりがいつになるか検討つきません。(笑)
まあ、1回目よりは短期間で出来るでしょう・・・。
CSVを使用した、なんちゃって在庫管理は出来てるのですが、データベースと言えば、やはりSQL使ってみたいですよね。
さて今回は、なんちゃってパソコン通信を考えてみます。
なぜこんなこと考えたかというと、ラズベリーパイがやっぱりおバカだからです。(笑)
画像処理とか計算量が増えると、やはり重いですよね。
なので、計算パワーがある普通のパソコン(ノートでもデスクトップでも)に処理を任せて、ラズベリーパイにはGPIOの出力のみを任せて、機械制御をしたほうがいいのではないかってことです。
テストの為、短時間で作ったので、インポートが多いとか詰めが甘いとかは、大目に見てください。(笑)
まずは、CSV(連携.csv)を用意。
,signal,on 0,signal1,0 1,signal2,0 2,signal3,0
そして、検知側(普通のパソコン側)
import numpy as np import pandas as pd import csv import tkinter as tk from datetime import datetime import time #csvの設定 signal_csv = '//データーのあるフォルダー/連携.csv' signal_number = 0 df = pd.read_csv(signal_csv, index_col=0, engine='python') while True: try: swich = df.at[signal_number, "on"] if swich == 0: print("ONにします") df.at[signal_number,"on"] = 1 df.to_csv(signal_csv, mode='w', encoding='cp932') else: print("OFFにします") df.at[signal_number, "on"] = 0 df.to_csv(signal_csv, mode='w', encoding='cp932') except : print("エラーだね") time.sleep(1)
今回は、1秒ごとにON、OFFを繰り返し検出しているという仮定です。
検知すれば、CSVに書き込みします。
なお、encoding='cp932'は、Windowsパソコンの為みたいなので、Linuxとかは違うみたい。
次に、GPIO側(ラズベリーパイ側)
import numpy as np import pandas as pd import csv import tkinter as tk from datetime import datetime import time #csvの設定 signal_csv = '//データーのあるフォルダー/連携.csv' signal_number = 0 while True: try: df = pd.read_csv(signal_csv, index_col=0, engine='python') swich = df.at[signal_number, "on"] if swich == 0: print("機械はそのまま操業します") else: print("機械に非常停止を送ります") except: print("エラーだね")
コード内には、GPIOの記述がありませんが、パソコン側が書き込んだCSVを見ているので、通信出来てるってことで良いのではないでしょうか。
なお、ラズベリーパイ側はtry exceptが無いと、プログラムを回してる間にエラーで止まります。
0.1秒ごとに読みに行くとか、時間間隔を取ってやってみたのですが、やはりタイミング良く、書き込み中などにぶち当たるみたい(推測)
CSVの書き込みを増やせば、何台だって行けそうです。(全然違う複数プログラムがCSVを中心にそれぞれが目的のパソコン向いて通信出来そう??)
まあ~素人考えなので、もっと良い方法あるんでしょうけどね(笑)
取り急ぎの思い付きでした。