By

Arduino vers Raspberry en 433MHz

Capteur dh22 sur un arduino, transmis en radio fréquence vers un raspberry.

Le capteur arduino :

image

Le récepteur raspberry pi :

image

Transmission en rs232, à 300 bit/s.

Coté Raspberry, le programme de capture affiche les informations au fur et à mesure qu'elles arrivent :
RPI-reception-RF

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]