Dataoverdracht tussen 2 aduino's uno

Arduino specifieke Software
Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor Nightmystic » 07 Apr 2016, 11:08

Nergens, maar hoe moet je die declareren?

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor nicoverduin » 07 Apr 2016, 11:21

Nightmystic schreef:Nergens, maar hoe moet je die declareren?
Kennelijk mis je nog wat. Want hij mist deze functie. Dus mogelijk heb je een verkeerde lib of mis je een deel van de code of heb je bij het overnemen of zo deze functie gedelete....

@edit: Dit is een standaard ESP8266 SDK functie. Dus moet je uitzoeken hoe je SDK api calls moet uitvoeren. En dat is ongetwijfeld beschreven op de ESP8266.com site.
@edit1: Nog ff verder gekeken. Maar in de Arduino geïnstalleerde SDK kan ik hem niet vinden. Hij zit wel in de AT SDK maar die wordt hier niet gebruikt. Dus moet je een eigen routine schrijven om byte voor byte weg te schrijven.
De code die in de AT sdk zit is deze:
cpp code
/******************************************************************************
* FunctionName : uart0_tx_buffer
* Description : use uart0 to transfer buffer
* Parameters : uint8 *buf - point to send buffer
* uint16 len - buffer len
* Returns :
*******************************************************************************/
void ICACHE_FLASH_ATTR
uart0_tx_buffer(uint8 *buf, uint16 len)
{
uint16 i;

for (i = 0; i < len; i++)
{
uart_tx_one_char(UART0, buf[i]);
}
}


Alleen die functie daarboven is een interrupt gedreven variant zo te zien. Ik heb weinig zin om dat helemaal voor je uit te pluizen. Deze variant mag je proberen om te zien fo je daarmee een paar van die fouten kan wegwerken.

cpp code
#include "uart.h"

/******************************************************************************
* FunctionName : uart0_tx_buffer
* Description : use uart0 to transfer buffer
* Parameters : uint8 *buf - point to send buffer
* uint16 len - buffer len
* Returns :
*******************************************************************************/
void ICACHE_FLASH_ATTR
uart0_tx_buffer(uint8 *buf, uint16 len)
{
uart_write(UART0,(char *) buf, len); // alternatieve manier om in een keer een buffer weg te pompen (NJV)
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor Nightmystic » 07 Apr 2016, 19:54

Dat snap ik Nico, het is een library en die gebruik je omdat het gemakkelijk moet zijn en als het teveel gedoe is heeft het geen zin er veel aandacht aan te besteden.

Ik ga mezelf erin verdiepen om het echt te gaan begrijpen en de communicatie zelf te kunnen programmeren.

Is het niet beter om de communicatie met I2C te doen? en mezelf daar in te verdiepen.

ik wil namelijk ook data heen en weer kunnen zenden, maar ik las dat de slave zelf geen data transfer kan initiëren....

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor nicoverduin » 07 Apr 2016, 19:55

Die variant werkte niet?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor nicoverduin » 07 Apr 2016, 19:57

Waarom gebruik je niet gewoon 2 x nodeMCU's en dan websockets. Dat is een werkende bewezen techniek. Oud collega gebruikt dit thuis. 2 x nodeMCU, Raspberry pi als webserver naar binnen en naar buiten.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor Nightmystic » 07 Apr 2016, 20:21

Met die code erin krijg ik deze foutmelding:

DHT22toBLYNK2AJAXSending2:17: error: expected initializer before 'uart0_tx_buffer'
DHT22toBLYNK2AJAXSending2:18: error: expected initializer before 'EasyTransfer_sendData'
DHT22toBLYNK2AJAXSending2:16: error: expected initializer before 'uart0_tx_buffer'
DHT22toBLYNK2AJAXSending2:63: error: expected initializer before 'EasyTransfer_sendData'
expected initializer before 'uart0_tx_buffer'

volgens mij pakt ie de hele uart library niet in Arduino IDE ofzo....

Met de NodeMCU moet ik lua gaan leren toch?

Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor Nightmystic » 07 Apr 2016, 22:09

Handige pagina:
https://learn.sparkfun.com/tutorials/i2c

Zo te zien is het wel handig eerst seriele communicatie te gaan leren, staat bij suggested reading.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor nicoverduin » 08 Apr 2016, 07:50

Nightmystic schreef:Met die code erin krijg ik deze foutmelding:

DHT22toBLYNK2AJAXSending2:17: error: expected initializer before 'uart0_tx_buffer'
DHT22toBLYNK2AJAXSending2:18: error: expected initializer before 'EasyTransfer_sendData'
DHT22toBLYNK2AJAXSending2:16: error: expected initializer before 'uart0_tx_buffer'
DHT22toBLYNK2AJAXSending2:63: error: expected initializer before 'EasyTransfer_sendData'
expected initializer before 'uart0_tx_buffer'

volgens mij pakt ie de hele uart library niet in Arduino IDE ofzo....

Met de NodeMCU moet ik lua gaan leren toch?

Je kan gewoon met C/C++ en de arduino ide programmeren op de nodeMCU.
Communicatie protocollen en onderscheid leren kan nooit geen kwaad.

En zet de sketch hier maar weer neer omdat ik verwacht dat je een ander fout hebt gemaakt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor Nightmystic » 08 Apr 2016, 09:30

Ik heb de NodeMCU besteld, slechts 5 dollar ongeveer op Ebay en toch best wat poorten etc.
Dat je hem gewoon in C kunt programmeren heeft me over de streep getrokken.

De code

cpp code
#include <uart.h>
#include <EasyTransfer.h>
#include <DHT.h>
#include <Wire.h>
/******************************************************************************
* FunctionName : uart0_tx_buffer
* Description : use uart0 to transfer buffer
* Parameters : uint8 *buf - point to send buffer
* uint16 len - buffer len
* Returns :
*******************************************************************************/
void ICACHE_FLASH_ATTR
uart0_tx_buffer(uint8 *buf, uint16 len)
{
uart_write(UART0,(char *) buf, len); // alternatieve manier om in een keer een buffer weg te pompen (NJV)
}

#define DHTPIN2 2 // [D4] Sensor in de koelkast
#define DHTTYPE2 DHT22 // DHT 22 (AM2302), AM2321

// Temperatuur Sensoren aanzetten
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;
}__attribute__((packed));
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;
}__attribute__((packed));

float h2;
float t2;
float hic;
int Potwaarde1;
boolean fanstatus = 0;
boolean buttonOnOff;
boolean sentReceive = 0;

//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);
}

// Potmeter
#define Pot1 A0

// Fan
#define FAN 8 // [D8] Ventilator

void setup()
{
pinMode(FAN, OUTPUT);
digitalWrite(FAN, LOW);
Serial1.begin(115200); // See the connection status in Serial Monitor
ET.begin(details(mydata), &Serial1); // start library // kies serial poort
ETbutton.begin(details(buttondata), &Serial1); // start library // kies serial poort
Wire.begin();
dht2.begin();
delay(2000);
}

void loop()
{
Potwaarde1 = analogRead(Pot1); //Read the voltage on the Potentiometer
Potwaarde1 = map(Potwaarde1,0,1023,0,255); // maximaal 500 milliseconden

// Om de temperatuur of de luchtvochtigheid te kunnen meten zijn 250 milliseconden nodig.
h2 = dht2.readHumidity();
// Read temperature as Celsius (the default)
t2 = dht2.readTemperature();
// Temperatuur in graden Celsius weergeven(isFahreheit = false)
hic = dht2.computeHeatIndex(t2, h2, false);

mydata.h2 = h2;
mydata.t2 = t2;
mydata.fanstatus = fanstatus;
delay(100);
ETbutton.receiveData();
ET.sendData();
}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dataoverdracht tussen 2 aduino's uno

Berichtdoor nicoverduin » 08 Apr 2016, 10:41

Heb je wel het juiste bordje geselecteerd? Dit is specifiek voor de ESP heh.....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 22 gasten