Arduino vers Raspberry en 433MHz
Capteur dh22 sur un arduino, transmis en radio fréquence vers un raspberry.
Le capteur arduino :
Le récepteur raspberry pi :
Transmission en rs232, à 300 bit/s.
Coté Raspberry, le programme de capture affiche les informations au fur et à mesure qu'elles arrivent :
Source du script "arduino2.pl"
#!/usr/bin/perl use Device::SerialPort; my $filename = "/dev/ttyUSB0"; my $port = Device::SerialPort->new($filename); $port->databits(8); $port->baudrate(300); $port->parity("none"); $port->stopbits(1); $port->write_settings; if (open(my $fh, '<', $filename)) { while (my $row = <$fh>) { chomp $row; #print ">>>$row\n"; if ($row =~ /(\d\d\.\d\d)<\/TEMP1>/){ print "Got temperature => $1 \n"; } if ($row =~ / (\d\d\.\d\d)<\/HYGRO1>/){ print "Got humidity => $1 \n"; } } } else { warn "Could not open file '$filename' $!"; }
[/crayon]
Source du code arduino (capture du DHT22 + envoi sur l'UART donc le transmetteur RF)
[crayon] #include// Data wire is plugged into port 7 on the Arduino // Connect a 4.7K resistor between VCC and the data pin (strong pullup) #define DHT22_PIN 7 // Setup a DHT22 instance DHT22 myDHT22(DHT22_PIN); void setup(void) { // start serial port Serial.begin(300); Serial.println("DHT22 Library Demo"); } void loop(void) { DHT22_ERROR_t errorCode; // The sensor can only be read from every 1-2s, and requires a minimum // 2s warm-up after power-on. delay(5000); Serial.print("\n\nRequesting data...\n\n"); errorCode = myDHT22.readData(); switch(errorCode) { case DHT_ERROR_NONE: Serial.print("\n\n "); Serial.print(myDHT22.getTemperatureC()); Serial.println(" "); delay( random(800, 4500)); Serial.print("\n\n"); Serial.print(myDHT22.getHumidity()); Serial.println(" "); // Alternately, with integer formatting which is clumsier but more compact to store and // can be compared reliably for equality: // break; case DHT_ERROR_CHECKSUM: Serial.print("check sum error "); Serial.print(myDHT22.getTemperatureC()); Serial.print("C "); Serial.print(myDHT22.getHumidity()); Serial.println("%"); break; case DHT_BUS_HUNG: Serial.println("BUS Hung "); break; case DHT_ERROR_NOT_PRESENT: Serial.println("Not Present "); break; case DHT_ERROR_ACK_TOO_LONG: Serial.println("ACK time out "); break; case DHT_ERROR_SYNC_TIMEOUT: Serial.println("Sync Timeout "); break; case DHT_ERROR_DATA_TIMEOUT: Serial.println("Data Timeout "); break; case DHT_ERROR_TOOQUICK: Serial.println("Polled to quick "); break; } } [/crayon]