via mqtt naar een arduino een variabele versturen

Arduino specifieke Software
Berichten: 47
Geregistreerd: 24 Nov 2014, 19:47

via mqtt naar een arduino een variabele versturen

Berichtdoor corolla_g6 » 30 Nov 2016, 12:56

hallo,

ik ben bezig met mqtt protocol om vanaf openhab te communiceren met arduino, dit lukt nu aardig... maar steeds een stapje verder...

ik wil bijvoorbeeld een variabele veranderen in een sketch van arduino door deze via mqtt te versturen.

zoals hieronder heb ik het werkend voor alleen een 0 of 1 of meerdere maar dan moet ik elke keer een case aanmaken en dat lijkt mij niet de bedoeling....

cpp code
if (strcmp(topic, "/arduino1/scene") == 0)
{
switch ((int)(p[0] - '0'))
{
case 0:
Serial.println("0");
client.publish("/arduino1/scene/status", "0");
break;
case 1:
Serial.println("1");
client.publish("/arduino1/scene/status", "1");
break;
case 2:
Serial.println("2");
client.publish("/arduino1/scene/status", "2");
break;
default:

break;
}
}


een variabele verzenden gebeurt door eerst de message te bufferen... maar nu andersom..

groeten dennis

Advertisement

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

Re: via mqtt naar een arduino een variabele versturen

Berichtdoor nicoverduin » 30 Nov 2016, 13:03

Je kan toch dit doen:
cpp code
uint8_t variabele = (int)(p[0] - '0');    // zet de waarde van MQTT om in een cijfer van 0 tot 9


Of je kijkt gelijk in p[0]. Daar staat het teken is waar je nu verder mee rommelt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 47
Geregistreerd: 24 Nov 2014, 19:47

Re: via mqtt naar een arduino een variabele versturen

Berichtdoor corolla_g6 » 30 Nov 2016, 13:29

oke, ik zie vaak voorbij komen dat er uint8_t gebruikt wordt... kan je mij uitleggen wat dit betekent? ik denk zelf iets met een int van 8 bit?

en moet ik dan jou regel zo gebruiken?

cpp code
if (strcmp(topic, "/arduino1/scene") == 0)
{
uint8_t variabele = (int)(p[0] - '0');
}


en dan zet hij het weg in variabele?
en als ik meer wil dan 0 - 9? moet ik dan op 16 of 32 bits gaan?

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

Re: via mqtt naar een arduino een variabele versturen

Berichtdoor nicoverduin » 30 Nov 2016, 15:04

Op de Arduino is een int16 bits lang. Op een ARM processors (32 bits) wordt het in een keer 32 bits. Als je nu uitgaat van 16 bits ge je mooi de boot in op een grotere processor. Vandaar dat er een hele zooi definities zijn opgenomen:
cpp code
int8_t = signed 8 bits integer
uint8_t = unsigned 8 bits integer
int16_t = signed 16 bits integer
uint16_t = unsigned 16 bits integer
int32_t = signed 32 bits integer
uint32_t = unsigned 32 bits integer

hou je bovenstaand aan dan gaat het op alle platformen goed. En daar ik tegenwoordig vrijwel dagelijks op de 32bits platformen zit is het handiger om een goede gewoonte 1x gelijk aan te leren.

Wil je meer data versturen dan ligt dat enerzijds aan hoe MQTT dat terugstuurt. Nu ontvang je gewoon tekens als een char string. Ik weet alleen niet of die zero terminated is (ik denk het wel) dan zou je bijvoorbeeld
cpp code
uint32_t variabele = atoi(p);


Dit kan je nu ook al testen en dan ff via de serial variabele uitprinten.

atoi() zet een ascii string om in een integer.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: alakaahuhuso, apudoxay en 92 gasten