Witam serdecznie wszystkich.
Arduino i raspberry zajmuje się od niedawna i hobbistycznie i proszę o wyrozumiałość gdyż raczkuje w programowaniu.
Bardzo proszę o pomoc w projekcie.
Na arduino zmontowałem układ z oled lcd, 3x ds18b20 jako 1-wire każdy na poszczególny pin (by łatwo zmieniać czujniki), 1x DHT11.
Całość działa bardzo fajnie ale potrzebuje podpiąć się do raspberry przez i2c i wysyłałć dane z czujników do skryptu w pythjonie. I tu zaczyna sie problem.
Albo wysyła mi jedna daną, jak próbuję wysłać tablicę wysyła mi tylko część.
Oto kody z płytek:
raspberry:
Obecnie dostaję ciąg: kwadracik kwadracik wynik czujnik DHT11 wynik czujnik t2
Próbowałem już kilka dni by dostać wynik z czujników w formacie: t1t2t3DHT11 czyli przykład: 23251945
Z góry bardzo dziekuję za pomoc.
Arduino i raspberry zajmuje się od niedawna i hobbistycznie i proszę o wyrozumiałość gdyż raczkuje w programowaniu.
Bardzo proszę o pomoc w projekcie.
Na arduino zmontowałem układ z oled lcd, 3x ds18b20 jako 1-wire każdy na poszczególny pin (by łatwo zmieniać czujniki), 1x DHT11.
Całość działa bardzo fajnie ale potrzebuje podpiąć się do raspberry przez i2c i wysyłałć dane z czujników do skryptu w pythjonie. I tu zaczyna sie problem.
Albo wysyła mi jedna daną, jak próbuję wysłać tablicę wysyła mi tylko część.
Oto kody z płytek:
Kod:
#include <DallasTemperature.h>
#include <OneWire.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define DHT11_PIN 7
#define SLAVE_ADDRESS 0x09
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
#define ONE_WIRE_BUS1 3
#define ONE_WIRE_BUS2 4
#define ONE_WIRE_BUS3 5
OneWire oneWire1(ONE_WIRE_BUS1);
OneWire oneWire2(ONE_WIRE_BUS2);
OneWire oneWire3(ONE_WIRE_BUS3);
DallasTemperature sensors1(&oneWire1);
DallasTemperature sensors2(&oneWire2);
DallasTemperature sensors3(&oneWire3);
float temp1;
float temp2;
int temp3;
int wil;
DHT dht;
void setup() {
display.clearDisplay();
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
sensors1.begin();
sensors1.setResolution(10);
dht.setup(DHT11_PIN);
Wire.begin(SLAVE_ADDRESS);
Wire.onRequest(sendData);
}
void loop() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Temp.");
display.setCursor(0, 16);
display.setTextSize(3);
TM1();
display.setCursor(40, 40);
display.setTextSize(3);
TM2();
display.setCursor(90, 16);
display.setTextSize(3);
TM3();
display.display();
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Wilgot.");
display.setCursor(0, 25);
display.setTextSize(3);
WILG();
display.setCursor(50, 25);
display.setTextSize(2);
display.println(" %RH");
display.display();
delay(10000);
}
void TM1() {
sensors1.requestTemperatures();
temp1 = sensors1.getTempCByIndex(0);
// display.println(temp1);
char tm1[2];
dtostrf(temp1, 2, 0, tm1);
display.println(tm1);
}
void TM2() {
sensors2.requestTemperatures();
temp2 = sensors2.getTempCByIndex(0);
// display.println(temp2);
char tm2[2];
dtostrf(temp2, 2, 0, tm2);
display.println(tm2);
}
void TM3() {
sensors3.requestTemperatures();
temp3 = sensors3.getTempCByIndex(0);
display.println(temp3);
}
void WILG() {
wil = dht.getHumidity();
display.println(wil);
}
char t1[2];
char t2[2];
char wil1[2];
//char wyn[4];
//char t1[3];
//char wil1[3];
char data[] = {t2,wil1};
int index = 0;
// callback for sending data
void sendData() {
// itoa(temp1, t1, 10);
itoa(wil, wil1, 10);
dtostrf(temp1, 2, 0, t1);
dtostrf(temp2, 2, 0, t2);
// dtostrf(wil, 2, 1, wil1);
// strcat(wyn, t1);
// strcat(wyn, t2);
Wire.write(data[index]);
++index;
if (index >= 6) {
index = 0;
}
}
raspberry:
Kod:
#!/usr/bin/python
import smbus
import time
bus = smbus.SMBus(1)
address = 0x09
while True:
data = ""
for i in range(0, 6):
data += chr(bus.read_byte(address));
# print data
h1 = data[2:4]
t1 = data[4:6]
print t1,"C,",h1,"%Rh"
break
Obecnie dostaję ciąg: kwadracik kwadracik wynik czujnik DHT11 wynik czujnik t2
Próbowałem już kilka dni by dostać wynik z czujników w formacie: t1t2t3DHT11 czyli przykład: 23251945
Z góry bardzo dziekuję za pomoc.