via mqtt naar een arduino een variabele versturen
4 berichten
• Pagina 1 van 1
- corolla_g6
- Berichten: 47
- Geregistreerd: 24 Nov 2014, 19:47
via mqtt naar een arduino een variabele versturen
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
een variabele verzenden gebeurt door eerst de message te bufferen... maar nu andersom..
groeten dennis
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: via mqtt naar een arduino een variabele versturen
Je kan toch dit doen:
cpp code
Of je kijkt gelijk in p[0]. Daar staat het teken is waar je nu verder mee rommelt.
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.
- corolla_g6
- Berichten: 47
- Geregistreerd: 24 Nov 2014, 19:47
Re: via mqtt naar een arduino een variabele versturen
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
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?
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?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: via mqtt naar een arduino een variabele versturen
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
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
Dit kan je nu ook al testen en dan ff via de serial variabele uitprinten.
atoi() zet een ascii string om in een integer.
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.
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: alakaahuhuso, apudoxay en 92 gasten