私たちは学校のプロジェクトに取り組んでいる 2 人の学生です。タスクは、PIR センサー (モーション センサー) をラズベリー パイに接続することです。センサーがモーションを検出するたびに、Windows Server 2019 を実行している AD/DNS サーバー上のテキスト ドキュメントに文字列を送信する必要があります。Python でコーディングし、クライアント (PIR センサーを実行している Raspberry Pi) に使用するコードは、次のコードを使用しています。
import RPi.GPIO as GPIO
import time
import datetime
import socket
GPIO.setmode(GPIO.BCM)
pir = 24
GPIO.setup(pir, GPIO.IN)
print ("Sensor initializing...")
time.sleep(2)
print ("active")
print ("press ctrl+c to end program")
mouvement = "Motion detected at "
while True:
if GPIO.input(pir) == True:
now = datetime.datetime.now()
fb = open("/home/pi/Projekt/pirsensor.txt", "a+")
#print (mouvement)
print(now.strftime("%Y-%m-%d %H:%M:%S "))
fb.write(mouvement)
fb.write(now.strftime("%Y-%m-%d %H:%M:%S "))
fb.write("\n")
fb.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.1.3', 5007))
s.send(mouvement)
s.send(now.strftime ("%Y-%m-%d %H: %M: %S "))
s.send("\n")
s.close()
#time.sleep(2)
#time.sleep(0.1)
GPIO.cleanup()
print (" program ended")
Windows Server 2019 で使用しているコードは次のとおりです。
from socket import *
port = 5007
file = ''
class Server:
gate = socket(AF_INET, SOCK_STREAM)
host = '192.168.1.3'
def __init__(self, port):
self.port = port
self.gate.bind((self.host, self.port))
self.listen()
def listen(self):
self.gate.listen(10)
while True:
print("Lyssnar på anslutningar, via port: ", self.port)
add = self.gate.accept()
self.reciveFileName()
self.reciveFile()
def reciveFileName(self):
while True:
data = self.gate.recv(1024)
self.file = data
def reciveFile(self):
createFile = open("new_"+self.file, "wb")
while True:
data = self.gate.recv(1024)
createFile.write(data)
createFile.close()
server= Server(port)
listen()
両方のデバイスが同じ LAN ネットワーク上で実行されており、静的 IP アドレスを持っています。互いに ping を実行し、PIR センサーを使用して Raspberry pi から Windows Server 2019 マシンに情報を送信できます。しかし、問題があります。Raspberry pi でコードを実行し、サーバーがデータを受信するのを待つと、次のエラーが発生します。
[WinError 10057] ソケットが接続されておらず、(sendto 呼び出しを使用してデータグラム ソケットで送信する場合) アドレスが指定されていないため、データの送受信要求は許可されませんでした
このエラーで立ち往生しており、修正方法がわかりません。私たちはウェブを検索してきましたが、2006 年のスレッドしか見つかりませんでした。どれも役に立ちませんでした。また、ファイアウォールを無効にしようとしたことも注目に値します。また、Python でのコーディングの経験もありません。