Dataoverdracht tussen 2 aduino's uno
28 berichten
• Pagina 1 van 3 • 1, 2, 3
Dataoverdracht tussen 2 aduino's uno
Met volgende code kan ik een byte versturen van de ene, naar de andere Arduino ( met I2C-bus )
Maar ik wil meer data versturen. Als je bv een temperatuur meting hebt, en je wil die waarde ( bv 26,4 graden ) versturen naar een tweede Arduino, dan kan dat niet met één byte.
Met welke code kan ik meerdere "grotere getallen" versturen naar een tweede Arduino ? Waar kan je een voorbeeld vinden ? Wie kan bovenstaande code aanpassen ? Dank bij voorbaat.
- Code: Alles selecteren
#include <Wire.h>
void setup() {
Wire.begin();
}
byte x = 112; // bijvoorbeeld getal 112
void loop() {
Wire.beginTransmission(8);
Wire.write("x = ");
Wire.write(x);
Wire.endTransmission();
Maar ik wil meer data versturen. Als je bv een temperatuur meting hebt, en je wil die waarde ( bv 26,4 graden ) versturen naar een tweede Arduino, dan kan dat niet met één byte.
Met welke code kan ik meerdere "grotere getallen" versturen naar een tweede Arduino ? Waar kan je een voorbeeld vinden ? Wie kan bovenstaande code aanpassen ? Dank bij voorbaat.
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Dataoverdracht tussen 2 aduino's uno
Je schrijft nu al meer dan 1 byte weg over I2C. Namelijk "x = "+ hexadecimaal 0x90. dus 5 bytes.
Je kan een struct maken met daar aan parallel een soort template als een byte array
bijvoorbeeld:
cpp code
en dan bij het verzenden
cpp code
Je kan een struct maken met daar aan parallel een soort template als een byte array
bijvoorbeeld:
cpp code
union {
struct {
float x; //is 4 bytes lang
int y; // is 2 bytes lang
uint32_t z; // is 4 bytes lang
}; // totale lengte is 10 bytes
byte msg[10]; // deze array ligt als het ware over de struct heen
} message;
en dan bij het verzenden
cpp code
Wire.beginTransmission(8);
for (uint16_t i = 0; i < sizeof(message.msg); i++){
//
// verstuur alle bytes
//
Wire.write(message.msg[i]);
}
Wire.endTransmission();
Re: Dataoverdracht tussen 2 aduino's uno
Met welke code moet je de data opvangen aan de ontvanger zijde ?
Re: Dataoverdracht tussen 2 aduino's uno
kijk eens naar easytransfer, daar wordt dat goed uitgelegd met die structures.
paul deelen
shooter@home.nl
shooter@home.nl
- Nightmystic
- Berichten: 133
- Geregistreerd: 10 Jan 2016, 16:39
Re: Dataoverdracht tussen 2 aduino's uno
easy transfer is super handig met 2 arduino's
maar van van arduino naar ESP8266 werkt het niet.
maar van van arduino naar ESP8266 werkt het niet.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Dataoverdracht tussen 2 aduino's uno
Zou kunnen. Geen idee of de auteur hem daarvoor al heeft aangepast. Of zit je nog te testen met die ESP's 01. Hebben die de I2C pinnen dan al naar buiten gevoerd?
- Nightmystic
- Berichten: 133
- Geregistreerd: 10 Jan 2016, 16:39
Re: Dataoverdracht tussen 2 aduino's uno
Ik ben met de ESP01's bezig.
Pete Scargill heeft er wat over geschreven, maar ik krijg dat niet voor mekaar. Zie http://tech.scargill.net/easytransfer-for-esp8266/
Dit compiled al niet:
uart0_tx_buffer(buf,size+4);
Zelfs met de uart.h library erin compiled hij nog niet. Reactie van Pete zelf was dat hij met de SDK werkt, niet met de Arduino IDE.
Zou iemand een voorbeeld kunnen maken hoe ik deze sketches wel werkend kan krijgen? Dan maak ik er een tutorial van en dan heeft iedereen die Arduino <-> ESP communicatie wil er wat aan.
cpp code
Sketch voor de ESP01
cpp code
Pete Scargill heeft er wat over geschreven, maar ik krijg dat niet voor mekaar. Zie http://tech.scargill.net/easytransfer-for-esp8266/
Dit compiled al niet:
uart0_tx_buffer(buf,size+4);
Zelfs met de uart.h library erin compiled hij nog niet. Reactie van Pete zelf was dat hij met de SDK werkt, niet met de Arduino IDE.
Zou iemand een voorbeeld kunnen maken hoe ik deze sketches wel werkend kan krijgen? Dan maak ik er een tutorial van en dan heeft iedereen die Arduino <-> ESP communicatie wil er wat aan.
cpp code
#include <EasyTransfer.h>
#include <DHT.h>
#include <Wire.h>
#define DHTPIN2 2
#define DHTTYPE2 DHT22 // DHT 22 (AM2302), AM2321
DHT dht2(DHTPIN2, DHTTYPE2);
//create object
EasyTransfer ET, ETbutton;
struct SEND_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to send
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
float h2;
float t2;
boolean fanstatus;
};
struct RECEIVE_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to receive
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
boolean buttonOnOff;
};
float h2;
float t2;
float hic;
int Potwaarde1;
boolean fanstatus = 0;
boolean buttonOnOff;
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
RECEIVE_DATA_STRUCTURE buttondata;
#define Pot1 A0
#define FAN 8
void setup()
{
pinMode(FAN, OUTPUT);
digitalWrite(FAN, LOW);
Serial1.begin(115200);
ET.begin(details(mydata), &Serial1); // start library // choose serial port
Wire.begin();
dht2.begin();
delay(2000);
}
void loop()
{
Potwaarde1 = analogRead(Pot1);
Potwaarde1 = map(Potwaarde1,0,1023,0,255);
h2 = dht2.readHumidity();
t2 = dht2.readTemperature();
hic = dht2.computeHeatIndex(t2, h2, false);
mydata.h2 = h2;
mydata.t2 = t2;
mydata.fanstatus = fanstatus;
delay(100);
ETbutton.receiveData();
ET.sendData();
if (Potwaarde1 > 10)
{
digitalWrite(FAN, HIGH);
fanstatus = 1;
}
if(buttondata.buttonOnOff == 1)
{
digitalWrite(FAN, HIGH);
fanstatus = 1;
}
if (Potwaarde1 < 10 && buttondata.buttonOnOff == 0)
{
digitalWrite(FAN, LOW);
fanstatus = 0;
}
}
Sketch voor de ESP01
cpp code
#include <EasyTransfer.h>
#include <DHT.h>
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
//#include <Wire.h>
#define DHTPIN2 2
#define DHTTYPE2 DHT22 // DHT 22 (AM2302), AM2321
// Temperatuur Sensoren aanzetten
DHT dht2(DHTPIN2, DHTTYPE2);
SimpleTimer timer;
//create object
EasyTransfer ET, ETbutton;
struct RECEIVE_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to receive
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
float h2;
float t2;
boolean fanstatus;
};
struct SEND_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to send
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
boolean buttonOnOff;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
RECEIVE_DATA_STRUCTURE buttondata;
int y;
boolean buttonOnOff;
BLYNK_WRITE(V4)
{
y = param.asInt();
if ( y == 1)
{
buttondata.buttonOnOff = 1;
}
else
{
buttondata.buttonOnOff = 0;
}
}
WidgetLCD lcd(3); // LCD Widget (BLYNK) Virtuele PIN 3
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = ""; //insert here your token generated by Blynk
ET.begin(details(mydata), &Serial);
ETbutton.begin(details(buttondata), &Serial);
lcd.clear();
}
void loop()
{
Blynk.run(); // Initiates Blynk
timer.run(); // Initiates SimpleTimer
if (mydata.fanstatus == 1)
{
led8.on();
} else
{
led8.off();
}
lcd.print(0, 0, "TEMP HUMI FAN");
lcd.print(0,1, mydata.t2);
lcd.print(5,1, " ");
lcd.print(7,1, mydata.h2);
lcd.print(12,1, " ");
lcd.print(14,1, mydata.fanstatus);
Blynk.virtualWrite(1, mydata.t2);
Blynk.virtualWrite(2, mydata.h2);
Blynk.virtualWrite(3, mydata.fanstatus);
delay(100);
ET.receiveData();
lcd.print(13,1, "NOW");
ETbutton.sendData();
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Dataoverdracht tussen 2 aduino's uno
Jou hoef ik inmiddels niet meer uit te leggen dat als iets niet compilet, het wel nodig is dat je aangeeft wat de foutboodschap is.
- Nightmystic
- Berichten: 133
- Geregistreerd: 10 Jan 2016, 16:39
Re: Dataoverdracht tussen 2 aduino's uno
cpp code
Foutmeldingen:
DHT22toBlynk2AJAXReceiving2.ino: In function 'void EasyTransfer_sendData(uint8_t*, uint8_t)':
DHT22toBlynk2AJAXReceiving2:56: error: 'uart0_tx_buffer' was not declared in this scope
DHT22toBlynk2AJAXReceiving2.ino: In function 'void BlynkWidgetWrite4(BlynkReq&, const BlynkParam&)':
DHT22toBlynk2AJAXReceiving2:70: error: 'struct RECEIVE_DATA_STRUCTURE' has no member named 'buttonOnOff'
DHT22toBlynk2AJAXReceiving2:74: error: 'struct RECEIVE_DATA_STRUCTURE' has no member named 'buttonOnOff'
DHT22toBlynk2AJAXReceiving2.ino: In function 'void loop()':
DHT22toBlynk2AJAXReceiving2:136: error: 'struct SEND_DATA_STRUCTURE' has no member named 't2'
DHT22toBlynk2AJAXReceiving2:138: error: 'struct SEND_DATA_STRUCTURE' has no member named 'h2'
DHT22toBlynk2AJAXReceiving2:140: error: 'struct SEND_DATA_STRUCTURE' has no member named 'fanstatus'
DHT22toBlynk2AJAXReceiving2:142: error: 'struct SEND_DATA_STRUCTURE' has no member named 't2'
DHT22toBlynk2AJAXReceiving2:143: error: 'struct SEND_DATA_STRUCTURE' has no member named 'h2'
DHT22toBlynk2AJAXReceiving2:144: error: 'struct SEND_DATA_STRUCTURE' has no member named 'fanstatus'
'uart0_tx_buffer' was not declared in this scope
#include <EasyTransfer.h>
#include <DHT.h>
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
//#include <Wire.h>
#define DHTPIN2 2
#define DHTTYPE2 DHT22 // DHT 22 (AM2302), AM2321
// Temperatuur Sensoren aanzetten
DHT dht2(DHTPIN2, DHTTYPE2);
SimpleTimer timer;
//create object
EasyTransfer ET, ETbutton;
struct RECEIVE_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to receive
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
float h2;
float t2;
boolean fanstatus;
} __attribute__((packed));
struct SEND_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to send
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
boolean buttonOnOff;
} __attribute__((packed));
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
RECEIVE_DATA_STRUCTURE buttondata;
//Sends out struct in binary, with header, length info and checksum
void ICACHE_FLASH_ATTR EasyTransfer_sendData( uint8_t *bfr, uint8_t size){
static uint8_t buf[40];
uint8_t CS;
CS = size;
buf[0]=0x06;
buf[1]=0x85;
buf[2]=CS;
for(int i = 0; i<size; i++){
CS^=*(bfr+i);
buf[i+3]=*(bfr+i);
}
buf[size+3]=CS;
uart0_tx_buffer(buf,size+4);
}
int y;
boolean buttonOnOff;
BLYNK_WRITE(V4)
{
y = param.asInt();
if ( y == 1)
{
buttondata.buttonOnOff = 1;
}
else
{
buttondata.buttonOnOff = 0;
}
}
WidgetLCD lcd(3); // LCD Widget (BLYNK) Virtuele PIN 3
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = ""; //insert here your token generated by Blynk
ET.begin(details(mydata), &Serial);
ETbutton.begin(details(buttondata), &Serial);
lcd.clear();
}
void loop()
{
Blynk.run(); // Initiates Blynk
timer.run(); // Initiates SimpleTimer
if (mydata.fanstatus == 1)
{
led8.on();
} else
{
led8.off();
}
lcd.print(0, 0, "TEMP HUMI FAN");
lcd.print(0,1, mydata.t2);
lcd.print(5,1, " ");
lcd.print(7,1, mydata.h2);
lcd.print(12,1, " ");
lcd.print(14,1, mydata.fanstatus);
Blynk.virtualWrite(1, mydata.t2);
Blynk.virtualWrite(2, mydata.h2);
Blynk.virtualWrite(3, mydata.fanstatus);
delay(100);
ET.receiveData();
lcd.print(13,1, "NOW");
ETbutton.sendData();
}
//Sends out struct in binary, with header, length info and checksum
void ICACHE_FLASH_ATTR EasyTransfer_sendData( uint8_t *bfr, uint8_t size){
static uint8_t buf[40];
uint8_t CS;
CS = size;
buf[0]=0x06;
buf[1]=0x85;
buf[2]=CS;
for(int i = 0; i<size; i++){
CS^=*(bfr+i);
buf[i+3]=*(bfr+i);
}
buf[size+3]=CS;
uart0_tx_buffer(buf,size+4);
}
Foutmeldingen:
DHT22toBlynk2AJAXReceiving2.ino: In function 'void EasyTransfer_sendData(uint8_t*, uint8_t)':
DHT22toBlynk2AJAXReceiving2:56: error: 'uart0_tx_buffer' was not declared in this scope
DHT22toBlynk2AJAXReceiving2.ino: In function 'void BlynkWidgetWrite4(BlynkReq&, const BlynkParam&)':
DHT22toBlynk2AJAXReceiving2:70: error: 'struct RECEIVE_DATA_STRUCTURE' has no member named 'buttonOnOff'
DHT22toBlynk2AJAXReceiving2:74: error: 'struct RECEIVE_DATA_STRUCTURE' has no member named 'buttonOnOff'
DHT22toBlynk2AJAXReceiving2.ino: In function 'void loop()':
DHT22toBlynk2AJAXReceiving2:136: error: 'struct SEND_DATA_STRUCTURE' has no member named 't2'
DHT22toBlynk2AJAXReceiving2:138: error: 'struct SEND_DATA_STRUCTURE' has no member named 'h2'
DHT22toBlynk2AJAXReceiving2:140: error: 'struct SEND_DATA_STRUCTURE' has no member named 'fanstatus'
DHT22toBlynk2AJAXReceiving2:142: error: 'struct SEND_DATA_STRUCTURE' has no member named 't2'
DHT22toBlynk2AJAXReceiving2:143: error: 'struct SEND_DATA_STRUCTURE' has no member named 'h2'
DHT22toBlynk2AJAXReceiving2:144: error: 'struct SEND_DATA_STRUCTURE' has no member named 'fanstatus'
'uart0_tx_buffer' was not declared in this scope
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Dataoverdracht tussen 2 aduino's uno
En als je nu eens goed leest wat daar staat.
Doe eens gek:
De eerste boodschap is deze:
cpp code
In de functie EasyTransfer_sendData() refereert hij naar uart0_tx_buffer. Waar zie jij dat die gedeclareerd wordt?
Doe eens gek:
De eerste boodschap is deze:
cpp code
DHT22toBlynk2AJAXReceiving2.ino: In function 'void EasyTransfer_sendData(uint8_t*, uint8_t)':
DHT22toBlynk2AJAXReceiving2:56: error: 'uart0_tx_buffer' was not declared in this scope
In de functie EasyTransfer_sendData() refereert hij naar uart0_tx_buffer. Waar zie jij dat die gedeclareerd wordt?
28 berichten
• Pagina 1 van 3 • 1, 2, 3
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 11 gasten