1

私たちは学校のプロジェクトに取り組んでいる 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 でのコーディングの経験もありません。

4

1 に答える 1