von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 18:14
Hallo Kollegen,
habe eine neue Herausfordureng...
muss aus einem byte array float int oder bool "machen" und kriege es
nicht hin :-(
siehe beispielcode hier:
1 #include <SPI.h>
2 #include <Ethernet.h>
3 #include <PubSubClient.h>
4 #include <Wire.h>
5 #include <LCD.h>
6 #include <LiquidCrystal_I2C.h>
7
8
9 // Update these with values suitable for your network.
10 byte mac [] = { 0xDE , 0xED , 0xBA , 0xFE , 0xFE , 0xED };
11 byte server [] = { 192 , 168 , 111 , 97 };
12 byte ip [] = { 192 , 168 , 111 , 99 };
13
14
15 // Temperature (DS18B20) connected to pin 7
16 //OneWire ds(7);
17
18
19 // MQTT message buffer
20 char message_buff [ 30 ];
21
22 // MQTT callback
23 void callback ( char * topic , byte * payload , unsigned int length );
24
25 // MQTT PubSub client
26 EthernetClient ethClient ;
27 PubSubClient client ( server , 1883 , callback , ethClient );
28
29 // MQTT callback function
30 void callback ( char * topic , byte * payload , unsigned int length ) {
31
32 !!!!!! hier ist mein problem !!!!!
33
34 int i ;
35 for ( i = 0 ; i < length ; i ++ ) {
36 message_buff [ i ] = payload [ i ];
37 }
38 message_buff [ i ] = '\0' ;
39 if ( message_buff [ i ] == 3 . 2 ){ Serial . println ( "float" ); Serial . println ( message_buff );}
40 if ( message_buff [ i ] == true ){ Serial . println ( "bool" ); Serial . println ( message_buff );}
41 String msg = String ( message_buff );
42 Serial . println ( message_buff );
43
44 }
45 // Setup
46 void setup () {
47 // Start the node at the IP address
48 Serial . begin ( 115200 );
49 Ethernet . begin ( mac , ip );
50
51 // Start MQTT client,
52 // let the home know the office is up
53
54 if ( client . connect ( "office" )) {
55 client . publish ( "/home/status/" , "office up" );
56
57 }
58 }
59
60
61 // Loop
62 void loop () {
63 // Start MQTT client
64 client . loop ();
65 // Read current temperature and
66 // publish it to /home/office/temperature/
67
68 }
69
70
71 // Temperature reading from DS18B20 module
72 // Code is from OneWire library example
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 18:19
habe mal "gehört" es würde mit union gehen... aber nie benutzt :-(
Zunächst einmal, ich kenne mich mit dieser Library noch nicht besonders
gut aus. Zunächst wäre interessant, woher die Daten kommen, die von der
Funktion "callback" verarbeitet werden. Dann ist es noch nötig zu
wissen, was für Daten ankommen, ob es Binär oder Text oder irgendein
bekanntes Protokoll ist.
Mit folgendem Code müsste man schonmal nachsehen können, was Ankommt,
falls es Textdaten sind: 1 void callback ( char * topic , byte * payload , unsigned int length ) {
2 Serial . print ( "Message arrived [" );
3 Serial . print ( topic );
4 Serial . print ( "] " );
5 for ( int i = 0 ; i < length ; i ++ ) {
6 Serial . print (( char ) payload [ i ]);
7 }
8 Serial . println ();
9 }
Und damit, was ankommt, falls es Binärdaten sind: 1 // ungetestet
2 void callback ( char * topic , byte * payload , unsigned int length ) {
3 Serial . print ( "Message arrived [" );
4 Serial . print ( topic );
5 Serial . print ( "] " );
6 static const char hex = "0123456789ABCDEF" ;
7 for ( int i = 0 ; i < length ; i ++ ) {
8 Serial . print ( hex [ payload [ i ] >> 4 ]);
9 Serial . print ( hex [ payload [ i ] & 0xF ]);
10 }
11 Serial . println ();
12 }
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 18:49
ERST EIN mal DANKE!!!!!! und alles gute in diesem Jahr!!!
hier die Ausgabe vim ersten auslese script:
1 Message arrived [ system / adapter / node - red / 0 / memHeapUsed ] 12 . 06
2 Message arrived [ system / adapter / node - red / 0 / uptime ] 6971
3 Message arrived [ system / adapter / mqtt / 0 / memHeapUsed ] 24 . 34
4 Message arrived [ system / adapter / mqtt / 0 / uptime ] 6891
5 Message arrived [ mqtt / 0 / DOino <> MQTT / 0 / 13 / 1 / 0 / 3 ] 10
6 Message arrived [ system / host / raspIObroker / load ] 0 . 5
7 Message arrived [ system / host / raspIObroker / memHeapUsed ] 18 . 6
8 Message arrived [ system / host / raspIObroker / uptime ] 31422
9 Message arrived [ system / adapter / admin / 0 / memHeapUsed ] 19 . 88
10 Message arrived [ system / adapter / admin / 0 / uptime ] 31419
11 Message arrived [ mqtt / 0 / DOino <> MQTT / 0 / 13 / 1 / 0 / 3 ] 100
12 Message arrived [ system / adapter / node - red / 0 / memHeapUsed ] 12 . 09
13 Message arrived [ system / adapter / node - red / 0 / uptime ] 6986
14 Message arrived [ system / adapter / mqtt / 0 / memHeapUsed ] 25 . 19
15 Message arrived [ system / adapter / mqtt / 0 / uptime ] 6906
16 Message arrived [ system / host / raspIObroker / load ] 0 . 39
17 Message arrived [ system / host / raspIObroker / memHeapUsed ] 19 . 74
18 Message arrived [ system / host / raspIObroker / uptime ] 31437
19 Message arrived [ mqtt / 0 / DOino <> MQTT / 0 / 13 / 1 / 0 / 3 ] 10
20 Message arrived [ system / adapter / admin / 0 / memHeapUsed ] 21 . 15
21 Message arrived [ system / adapter / admin / 0 / uptime ] 31434
22 Message arrived [ system / adapter / node - red / 0 / memHeapUsed ] 12 . 13
23 Message arrived [ system / adapter / node - red / 0 / uptime ] 7001
24 Message arrived [ system / adapter / mqtt / 0 / memHeapUsed ] 26 . 01
25 Message arrived [ system / adapter / mqtt / 0 / uptime ] 6921
26 Message arrived [ mqtt / 0 / DOino <> MQTT / 0 / 13 / 1 / 0 / 3 ] 100
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 18:51
beim 2ten bringt er Fehlermeldung beim kompilieren:
invalid conversion from 'const char*' to 'char' [-fpermissive]
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 18:52
vom server kommen nur zahlen (+ /- , float und int (bool)...
mehr eigentlich auch nicht...
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 18:55
ok...
damit
static const char hex[] = "0123456789ABCDEF";
kommt folgendes: 1 Message arrived [ system / adapter / node - red / 0 / uptime ] 37333331
2 Message arrived [ system / adapter / mqtt / 0 / memHeapUsed ] 32352E3337
3 Message arrived [ system / adapter / mqtt / 0 / uptime ] 37323531
4 Message arrived [ mqtt / 0 / DOino <> MQTT / 0 / 13 / 1 / 0 / 3 ] 3130
5 Message arrived [ system / host / raspIObroker / load ] 302E3139
6 Message arrived [ system / host / raspIObroker / memHeapUsed ] 31372E3933
7 Message arrived [ system / host / raspIObroker / uptime ] 3331373832
8 Message arrived [ system / adapter / admin / 0 / memHeapUsed ] 31382E3239
9 Message arrived [ system / adapter / admin / 0 / uptime ] 3331373739
10 Message arrived [ mqtt / 0 / DOino <> MQTT / 0 / 13 / 1 / 0 / 3 ] 313030
11 Message arrived [ system / adapter / node - red / 0 / memHeapUsed ] 392E3233
12 Message arrived [ system / adapter / node - red / 0 / uptime ] 37333436
13 Message arrived [ system / adapter / mqtt / 0 / memHeapUsed ] 32362E3233
14 Message arrived [ system / adapter / mqtt / 0 / uptime ] 37323636
15 Message arrived [ system / host / raspIObroker / load ] 302E3135
16 Message arrived [ system / host / raspIObroker / memHeapUsed ] 31392E3036
17 Message arrived [ system / host / raspIObroker / uptime ] 3331373937
18 Message arrived [ mqtt / 0 / DOino <> MQTT / 0 / 13 / 1 / 0 / 3 ] 3130
19 Message arrived [ system / adapter / admin / 0 / memHeapUsed ] 31392E3537
20 Message arrived [ system / adapter / admin / 0 / uptime ] 3331373934
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 18:56
1ste Augabe:
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 100
Binärdaten dazu:
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 313030
oder hier negativ (-20.20) als payload
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 2D32302E32
01.01.2016 18:59 :
Bearbeitet durch User
von
Dieter S. (Gast)
01.01.2016 20:09
Warum schreibst du nicht, dass die Info von hier kommt:
http://forum.arduino.cc/index.php?topic=369152.0
Crossposting wird nicht geduldet, also lass es.
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 20:11
hier wurde mitr schon mal geholfen... und dort ist nicht... deswegen
habe ich hier gepostet... ist doch nicht im gleichen forum...
von
Max M.
(Firma: Herr)
(maxtox )
01.01.2016 20:26
sooo...
erste erfolge :-)
1 void callback ( char * topic , byte * payload , unsigned int length ) {
2 .
3 .
4 .
5 int i ;
6 for ( i = 0 ; i < length ; i ++ ) {
7 message_buff [ i ] = payload [ i ];
8 }
9 message_buff [ i ] = '\0' ;
10 //in den buffer schreiben
11 char * test = message_buff ;
12 //Pointer setzen Anfangsadresse
13 double temp = strtod ( test , NULL );
14 //"strtod" converts the string "temp" into a double precision number
15 int tempo = atoi ( test );
16 // Array to int
17 float ftemp = atof ( test );
18 // Array to float
19 Serial . println ( "BUFF" ); Serial . println ( message_buff );
20 Serial . println ( "FTEMP" ); Serial . println ( ftemp );
21 Serial . println ( "sieg3:=" ); Serial . println ( tempo );
22
23 }
ist so ok???
oder geht es auch LEGANTER?
von
Max M.
(Firma: Herr)
(maxtox )
02.01.2016 08:04
Kann jemand zu meinem Problem was sagen? Hat jemand einen Tipp??
von
Brain 2.0 (Gast)
02.01.2016 12:01
Max M. schrieb:
> Kann jemand zu meinem Problem was sagen? Hat jemand einen Tipp??
Wie, du hast ein Problem?
Frage doch mal im anderen Forum.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.