2017-07-06 1 views
1

wenn ich laufende Programm auf Himbeer-pi-Daten zu senden, es richtig Arduino arbeiten, aber gestoppt Senden von DatenBluetooth-Fehler (11, Ressource ist vorübergehend nicht verfügbar)

Fehlermeldung "einen Fehler plötzlich und zurück

socket.send('0') 
bluetooth error(11,resource are temporarily unavailable) 

Dieses Programm zielt darauf ab, 0 an Arduino zu senden, wenn Arduino 0 Buzzer erhält Alarm wird es sonst Alarm ..for 2 Minuten alles gut geht, aber plötzlich Summer Alarm, aber die 2 Bluetooth in 'Pi' und 'Arduino' immer noch nicht getrennt .

ich Meer rch für den Fehler und finde es, weil der Puffer in Pi ist voll und es wird in den Block, aber ich kann das Problem nicht lösen, kann mir jemand helfen? danke.

Hier ist der Code

import bluetooth 
import time 
bd_addr = "98:D3:31:FB:19:AF" 
port = 1 
sock = bluetooth.BluetoothSocket (bluetooth.RFCOMM) 
sock.connect((bd_addr,port)) 
while 1: 
     sock.send("0") 
time.sleep(2) 
sock.close() 

Arduino Code

#include <SoftwareSerial.h> 
SoftwareSerial bt (5,6); 
int LEDPin = 13; //LED PIN on Arduino 
int btdata; // the data given from the computer 
void setup() { bt.begin(9600); pinMode (LEDPin, OUTPUT); } 
void loop() { 
    if (bt.available()) { 
     btdata = bt.read(); 
     if (btdata == '1') { 
      //if 1 
      digitalWrite (LEDPin,HIGH); 
      bt.println ("LED OFF!"); 
     } 
     else { 
      //if 0 
      digitalWrite (LEDPin,LOW); 
      bt.println ("LED ON!"); 
     } 
    } else { digitalWrite(LEDPin, HIGH); 
      delay (100); //prepare for data 
    } 
} 

Antwort

0

Ich glaube, Sie es überschwemmen, da Sie keine Verzögerung in Ihrer während haben. Sie erzeugen Daten, die schneller gesendet werden, als sie tatsächlich gesendet werden können. Dadurch wird der Puffer möglicherweise vollständig gefüllt. Fügen Sie einfach einen time.sleep(0.5) in Ihrem while hinzu und verringern Sie den Wert 0.5, indem Sie testen, welcher am besten funktioniert, ohne den Puffer zu füllen.

Dies ist mein Versuch Code belastbarer zu machen:

import bluetooth 
import time 
bd_addr = "98:D3:31:FB:19:AF" 
port = 1 
sock = bluetooth.BluetoothSocket (bluetooth.RFCOMM) 
sock.connect((bd_addr,port)) 
while 1: 
    try: 
     sock.send("0") 
     time.sleep(0.1) 
     sock.recv(1024) 
    except bluetooth.btcommon.BluetoothError as error: 
     print "Caught BluetoothError: ", error 
     time.sleep(5) 
     sock.connect((bd_addr,port)) 
time.sleep(2) 
sock.close() 

Was das bedeutet ist:

  • ein wenig warten, bevor ein neues Paket zu senden: Verhindern, dass Ihr Computer aus Daten schneller als es es senden kann, die schließlich den Puffer füllt

  • Lesen Sie die eingehenden Daten, so dass es aus dem eingehenden Puffer verbrauchen: das Arduino tatsächlich a Nswers Ihre Anfragen, und das füllt den eingehenden Puffer. Wenn Sie es nicht ab und leeren, wird es überlaufen und Ihre Steckdose unbrauchbar

  • Monitor für Verbindungsfehler gemacht werden, und versucht, sich von ihnen durch Schließen und erneuten Öffnen der Buchse

zu erholen

ich würde auch den arduino-Code wie folgt ändern:

#include <SoftwareSerial.h> 
SoftwareSerial bt (5,6); 
int LEDPin = 13; //LED PIN on Arduino 
int btdata; // the data given from the computer 
void setup() { bt.begin(9600); pinMode (LEDPin, OUTPUT); } 
void loop() { 
    if (bt.available()) { 
     btdata = bt.read(); 
     if (btdata == '1') { 
      //if 1 
      digitalWrite (LEDPin,HIGH); 
      bt.println ("LED OFF!"); 
     } 
     else { 
      //if 0 
      digitalWrite (LEDPin,LOW); 
      bt.println ("LED ON!"); 
     } 
     delay(1000); 
    } else { digitalWrite(LEDPin, HIGH); 
      delay (10); //prepare for data 
    } 
} 
+0

ich das tun, aber immer noch die gleichen Fehler nach einigen minutes..i 0,5 versuchte oder 0,2 oder 0,01 oder 0,001 aber der Fehler immer noch –

+0

passieren wird modifiziert, ich meine antworten Sie, um Ihren Code widerstandsfähiger zu machen –

+0

Leider, anstatt der Daten nach 2 Minuten gestoppt und Summer Alarm zu beginnen ... jetzt die Buzzer als blink (pep einmal) und nach 2 Minuten Alarm kontinuierlich. –

Verwandte Themen