Hallo zusammen!
Ich hoffe hier hat jemand mehr ahnung von den IoT Widgets als ich und kann mir bei meinem aktuellen Projekt weiterhelfen.
Mein aktuelles Ziel ist es, mit Hilfe des IoT Messenger Widgets eine Nachricht an meinen Arduino Nano 33 IoT zu senden, und diese dann über eine I2C Verbindung an einen Arduino Nano 33 BLE zu senden.
Unabhängig voneinander konnte ich beides bereits umsetzen:
-dem 33 IoT eine Nachricht mit dem Messenger schicken und diese dann mit Serial.print darstellen
- mit dem 33 BLE als Master und dem 33 IoT als slave eine Kommunikation mit Recieve und Request umsetzen
Jedoch habe ich Schwierigkeiten beides zusammenzufügen.
Am Code für den 33 BLE habe ich nichts verändert und der läuft auch fleißig vor sich hin mit seinen Requests, der IoT empfängt auch die Nachrichten, die ich ihm schicke, aber er übergibt nichts an den BLE.
Über jegleiche Ideen würde ich mich sehr freuen, da es leider sehr wenig Informationen zum Messenger gibt
Das hier ist mein Master Code (der auf dem BLE läuft):
//Master
#include <Wire.h>
#define SLAVE_ADDR 9
#define ANSWERSIZE 5
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.print("Its a me, the master");
}
void loop() {
// put your main code here, to run repeatedly:
delay(500);
Serial.println("Start Request");
//Anfragen
Wire.beginTransmission(SLAVE_ADDR);
Wire.write(0);
Wire.endTransmission();
Serial.println("Read Answer");
//auslesen und anhängen
Wire.requestFrom (SLAVE_ADDR, ANSWERSIZE);
String response = "";
while(Wire.available()){
char b= Wire.read();
response += b;
}
//Ergebnis printen
Serial.println(response);
}
und das mein Slave (IoT):
#include "thingProperties.h"
#include <Wire.h>
#define ARRAYLENGTH 5
#define SLAVE_ADDR 9
#define ANSWERSIZE 5
String answer;
void setup() {
Wire.begin();
Wire.begin(SLAVE_ADDR);
Wire.onRequest(requestEvent);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
}
void onTextChange() {
answer= text;
Serial.println(answer);
}
}
void receiveEvent(int numBytes) {
while (Wire.available()) {
byte x = Wire.read();
}
Serial.println("Read");
}
void requestEvent() {
byte response[ANSWERSIZE];
for (byte i = 0; i < ANSWERSIZE; i++) {
response[i] = (byte)answer/*[a]*/.charAt(i);
}
Wire.write(response, sizeof(response));
Serial.println("RequestEvent");
}
Es liegt nicht daran, dass Wire.onRequest und Wire.onRecieve im Setup stehen, jedenfalls hat ein einfügen in den Loop nichts geändert. Die thingProperties.h Datei wird automatisch von der IoT Cloud erstellt und ich habe diese nicht verändert.
Vielen vielen Dank im Voraus!