Project /
RaspberryIccArduino
Raspberry to Arduino via I2C
Send a number and receive DHT11 temperature humdity sensors values
/**
* Raspberry as I2C MASTER (3.3V)
* send a number via I2C
* Arduino as I2C Slave (5V)
* answer values of DHT11 sensor
*
* 3 Wires:
*
* Arduino - Raspberry
* GND - GND
* A4 - 2 (front to 5V)
* A5 - 3 (front to GND)
*
*/
#include <Wire.h>
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2
#define SLAVE_ADDRESS 0x12
/*
* dataReceived is to_send number in python script
*/
int dataReceived = 0;
// char cannot contain space
char msg[255] = "some_text_without_space";
int index = 0;
void setup() {
Serial.begin(9600);
Wire.begin(SLAVE_ADDRESS);
Wire.onReceive(receiveData);
Wire.onRequest(sendData);
Serial.println(msg);
}
void loop() {
// No need delay
}
void receiveData(int byteCount){
while(Wire.available()) {
dataReceived = Wire.read();
}
int chk = DHT11.read(DHT11PIN);
sprintf(msg,"{'temperature':'%i','humidity':'%i','msg':'%i'}",DHT11.temperature,DHT11.humidity, dataReceived);
Serial.println(msg);
}
void sendData(){
Wire.write(msg[index]);
++index;
if (index >= 255) {
index = 0;
}
}
/** python script below:
#
# send_212_to_arduino_via_i2c.py
#
import smbus
import time
# Replace 1 by 0 for old Raspberry (without hole)
bus = smbus.SMBus(1)
arduinomessage = ""
arduino_slave_address = 0x12
to_send = 212
# print "Sending number: ", to_send, " to arduino"
bus.write_byte(arduino_slave_address, to_send)
# Waitng a bit for response
time.sleep(1)
for i in range(0, 255):
arduinomessage += chr(bus.read_byte(arduino_slave_address));
print arduinomessage
</code>
*/
