質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

解決済

サーバーからラズベリーパイへのデータ送信について

kttd
kttd

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

1回答

0評価

0クリップ

323閲覧

投稿2022/02/21 09:12

編集2022/02/25 11:17

サーバーとラズベリーパイはソケット通信で接続されています。データ送信側がサーバー、データ受信側をラズベリーパイとして、サーバー上のプログラムの中でif文でa=1ならラズベリーパイ上にデータ1を出力、a=2のときラズベリーパイ上にデータ2を出力、、といったことを行いたいのですが、

python

# -*- Coding: utf-8 -*- import serial import time import socket import requests import argparse import json import cv2 import subprocess import pandas as pd import numpy as np from scipy import signal import pywt import threading import picamera import picamera.array with picamera.PiCamera() as camera: camera.resolution = (400,300) camera.start_preview() camera.capture('test.jpg') import matplotlib matplotlib.rcParams['backend']='TkAgg' import matplotlib.pyplot as plt from PIL import Image from io import BytesIO import errno import collections as cl import datetime from timeout_decorator import timeout, TimeoutError subscription_key = "key添付予定" assert subscription_key image_path = "/home/pi/test.jpg" parser = argparse.ArgumentParser() parser.add_argument('--ip_addr', help="Put the client's ip address here") args = parser.parse_args() connorclo=0 def main(): RR=[] sin=[] gpio_seri = serial.Serial('/dev/ttyUSB0', 115200, timeout=1) dt=1 fs = 1.0/dt cnt = 0 senddic={} print("START") t=1 senddic={} print("START") t=1 gpsla=gpsla1=0.0 gpslo=gpslo1=0.0 while True: bio_data = gpio_seri.readline().rstrip().decode('unicode-escape')+","+str(gpsla)+","+str(gpsla) bd=bio_data.split(",") if len(bd)>17: if bd[15] == '': bd[15] = 60 elif bd[15].isdecimal() == False: bd[15] = 60 else: sin.append(int(bd[15])) if int(bd[15])>0: r = 60/float(bd[15]) RR.append(r) cnt +=1 if cnt % 10 ==0: print(cnt) if(len(RR)>=1024): #mae ha 5 dt_now=datetime.datetime.now().strftime('%Y/%m/%d_%H:%M:%S') print(dt_now) print("ond: "+bd[0]+" sitsudo: "+bd[1]+" taikiatsu: "+bd[2]+" kido: "+bd[3]+" dkenti: "+ bd[4]) print("kasokux: "+bd[5]+" ky: "+bd[6]+" kz: "+bd[7]+" kkx: "+bd[8]+" kky: "+bd[9]+" kkz: "+bd[10]+" tizix: "+bd[11]+" tiziy: "+bd[12]+" tiziz: "+bd[13]) print("taion: "+bd[14]+" sinpaku: "+bd[15]+" GSR: "+bd[16]) print("heikinshinpaku", sum(sin)/len(sin),"RRheikin",sum(RR)/len(RR),int(len(RR))) t1 = time.time() s = pd.Series(RR) #freq2, pow_dend=signal.periodogram(s, fs) vlf = 0.04 lf = 0.15 hf = 0.4 Fs = 250 dy=1.0/Fs nq_f = fs/2.0 wavelet_type = 'cmor1.5-1.0' wav = pywt.ContinuousWavelet(wavelet_type) freqs = np.linspace(0.0001,nq_f,1024) freqs_rate = freqs / fs scales = 1 / freqs_rate scales = scales[::-1] frequencies_rate = pywt.scale2frequency(scale=scales, wavelet=wavelet_type) frequencies = frequencies_rate / dt cwtmatr, freqs_rate = pywt.cwt(s, scales, wavelet_type) pow_den = (np.abs(cwtmatr)) pow_den = pow_den[200] lf_freq_band = (freqs_rate >= vlf) & (freqs_rate <= lf) hf_freq_band = (freqs_rate >= lf) & (freqs_rate <= hf) LF1 = np.trapz(pow_den[lf_freq_band], x=None, dx=dy) HF1 = np.trapz(pow_den[hf_freq_band], x=None, dx=dy) pow_den = (np.abs(cwtmatr)) pow_den = pow_den[400] #print(pow_den) lf_freq_band = (freqs_rate >= vlf) & (freqs_rate <= lf) hf_freq_band = (freqs_rate >= lf) & (freqs_rate <= hf) LF2 = np.trapz(pow_den[lf_freq_band], x=None, dx=dy) HF2 = np.trapz(pow_den[hf_freq_band], x=None, dx=dy) pow_den = (np.abs(cwtmatr)) pow_den = pow_den[600] lf_freq_band = (freqs_rate >= vlf) & (freqs_rate <= lf) hf_freq_band = (freqs_rate >= lf) & (freqs_rate <= hf) LF3 = np.trapz(pow_den[lf_freq_band], x=None, dx=dy) HF3 = np.trapz(pow_den[hf_freq_band], x=None, dx=dy) pow_den = (np.abs(cwtmatr)) pow_den = pow_den[800] lf_freq_band = (freqs_rate >= vlf) & (freqs_rate <= lf) hf_freq_band = (freqs_rate >= lf) & (freqs_rate <= hf) LF4 = np.trapz(pow_den[lf_freq_band], x=None, dx=dy) HF4 = np.trapz(pow_den[hf_freq_band], x=None, dx=dy) pow_den = (np.abs(cwtmatr)) pow_den = pow_den[1000] lf_freq_band = (freqs_rate >= vlf) & (freqs_rate <= lf) hf_freq_band = (freqs_rate >= lf) & (freqs_rate <= hf) LF5 = np.trapz(pow_den[lf_freq_band], x=None, dx=dy) HF5 = np.trapz(pow_den[hf_freq_band], x=None, dx=dy) LF_HF = (np.float64(LF1+LF2+LF3+LF4+LF5) / (HF1+HF2+HF3+HF4+HF5)) * 5 print(LF_HF) t2 = time.time() elapsed_time = t2-t1 #print(elapsed_time) bio_data=bio_data+","+str(LF_HF) with socket.socket(socket.AF_INET,socket.SOCK_STREAM)as s: data = socket.recv(2) if(data==1): subprocess.call("aplay 20211110_075611.wav", shell=True) elif(data==2): subprocess.call("aplay 20211110_075639.wav", shell=True) elif(data==3): subprocess.call("aplay 20211110_075718.wav", shell=True) elif(data==4): subprocess.call("aplay 20211110_075611.wav", shell=True) elif(data==5): subprocess.call("aplay 20211110_075611.wav", shell=True) elif(data==6): subprocess.call("aplay 20211110_075805.wav", shell=True) else: pass with picamera.PiCamera() as camera: camera.resolution = (400,300) camera.capture('test.jpg') image_data = open(image_path, "rb").read() img = cv2.imread(image_path) cv2.waitKey(1000) headers = {'Ocp-Apim-Subscription-Key': subscription_key, 'Content-Type': 'application/octet-stream'} params = {'visualFeatures': 'Description'} try: response = requests.post( analyze_url, headers=headers, params=params, data=image_data) except requests.exceptions.ConnectionError: continue #print(datetime.datetime.now()) response.raise_for_status() analysis = response.json()['description']['tags'] jsonana=json.dumps(analysis).replace("\"","") if connorclo==1: jsonana1=json.dumps(analysis) gpsthread3 = threading.Thread(target=socket_data, args=(bio_data, jsonana1)) gpsthread3.daemon = True gpsthread3.start() dt_now=datetime.datetime.now().strftime('%Y/%m/%d_%H:%M:%S') senddic["key"+str(t)] = {"nowtime":dt_now} senddic["key"+str(t)].update({"bio_data":bio_data}) senddic["key"+str(t)].update({"camera":jsonana}) t+=1 print(connorclo) print("b") if(t==3): json_data = json.dumps(senddic).replace("\\", "").replace("[","").replace("]","").replace(" ","") file_path = "./sendata2.json" with open(file_path, 'w') as f: json.dump(json_data, f,ensure_ascii=False) t=1 print("a") sendic={} print("wait") if cv2.waitKey(1) & 0xFF == ord('q'): break cnt=0 del RR[:100] cv2.destroyAllWindows() if __name__ == '__main__': main()

上記のプログラムを実行時に、次の箇所について

python

with socket.socket(socket.AF_INET,socket.SOCK_STREAM)as s: data = socket.recv(2) if(data==1): subprocess.call("aplay 20211110_075611.wav", shell=True) elif(data==2): subprocess.call("aplay 20211110_075639.wav", shell=True) elif(data==3): subprocess.call("aplay 20211110_075718.wav", shell=True) elif(data==4): subprocess.call("aplay 20211110_075611.wav", shell=True) elif(data==5): subprocess.call("aplay 20211110_075611.wav", shell=True) elif(data==6): subprocess.call("aplay 20211110_075805.wav", shell=True) else: pass

AttributeError: type object socket has no attribute 'recv'
というエラーが発生したため、どのようにプログラムを修正するべきか教えていただけないでしょうか。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai

2022/02/21 10:42

そのサーバなるものと、ラズパイというのはどういうふうに接続されてるんでしょうか。 また、ラズパイじゃなく、ふつうのPCであればその方法はわかるんでしょうか。 あまりに説明不足すぎて答えようがないです
thkana

2022/02/21 11:32

「指定」は誰がどのようにするのですか、なんてことも不明です。 送信すること自体は多分とても簡単なことになるはずですが、何をどうしたいかが説明されていないので例を示すことはできません。
kttd

2022/02/21 14:39

ご意見ありがとうございます。この度は、私の説明不足により大変申し訳ございませんでした。いただいた意見をもとに質問内容の追記をさせていただきます。
thkana

2022/02/22 11:05

> ソケット通信で接続されています。 接続できているのなら、一方でsendしてもう一方でrecvすればよいのではないでしょうか? 'Python socket'あたりで検索すればいろいろ例が見つかると思いますが、それでは不明ななにかがありますか?
kttd

2022/02/22 13:35

ご意見ありがとうございます。実際にプログラムを動作させてみたのですが、 AttributeError: type object socket has no attribute 'recv' とエラーが表示されてしまいました。 こちらのエラーについて検索をしてみたのですが、エラーが発生する原因がわからないため、なぜこのようなエラーが表示されるか知っていることがございましたら、申し訳ないのですが教えていただけないでしょうか。
y_waiwai

2022/02/22 21:56

質問文にそれを書きましょう ここで長々と書いてますが、あなたに聞きたいのはただひとつ、 質門はなんでしょうか
thkana

2022/02/22 22:18

すみません、超能力スキルが足りなくて、ソースコードなしに出たエラーだけ示されても私には解決できそうにありません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。