Ciao a tutti sto costruendo un Idrometro con con sonar della Maxbotix e Arduino UNO Wifi rev.2 che invia dati a un cruscotto della Ubidots. Fino a qui tutto ok funziona benissimo e riesco a inviare i dati a intervalli regolari. Ora vorrei che il mio Arduino UNO wifii rev2 mandi un allarme su telegram tramite bot quando il livello raggiunge la soglia di attenzione e quando raggiunge il livello di l'allarme. vi allego lo script che funziona, ma manca la parte telegram, ne ho provati diversi ma non riesco proprio a farlo funzionare. Grazie
#include <WiFiNINA.h>
#include <SPI.h>
#include <PubSubClient.h>
/****************************************
* Define Constants
****************************************/
namespace {
const char * WIFISSID = "Vodafone-test"; // Put your WifiSSID here
const char * PASSWORD = "Aixenprovence-76"; // Put your wifi password here
const char * TOKEN = "BBFF-GNBKaaOWdBi92FJTVR6HEQc43MHGON"; // Put your Ubidots' TOKEN
const char * MQTT_CLIENT_NAME = "RCfkAg9FOfEc"; // MQTT client Name, assign an unique 8-12 alphanumeric character ASCII string;
const char * VARIABLE_LABEL = "distance"; // Assign the variable label
const char * DEVICE_LABEL = "arduinouno"; // The MAC address of the device will be assigned as device label
const char * MQTT_BROKER = "industrial.api.ubidots.com";
const int ANALOG_PIN_0 = A0; // INGRESSO A0
int analog_value, distance_mm, distance_cm;
}
/* Sensor's declarations */
int distance;
/* Space to store the request */
char payload[50];
char topic[50];
/****************************************
* Auxiliar Functions
****************************************/
WiFiClient ubidots;
PubSubClient client(ubidots);
void callback(char* topic, byte* payload, unsigned int length) {
char p[length + 1];
memcpy(p, payload, length);
p[length] = NULL;
String message(p);
Serial.write(payload, length);
Serial.println(topic);
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.println("Attempting MQTT connection...");
// Attemp to connect
if (client.connect(MQTT_CLIENT_NAME, TOKEN, "")) {
Serial.println("Connected");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 2 seconds");
// Wait 2 seconds before retrying
delay(2000);
}
}
}
/****************************************
* Sensor Functions
****************************************/
int readDistance() {
analog_value = analogRead(ANALOG_PIN_0);
distance_mm = analog_value * 5;
distance_cm = distance_mm / 10;
return distance_cm;
}
/****************************************
* Main Functions
****************************************/
void setup() {
Serial.begin(115200);
WiFi.begin(WIFISSID, PASSWORD);
Serial.println();
Serial.print("Wait for WiFi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi Connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(MQTT_BROKER, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
/* call the funtion readDistance() */
distance = readDistance();
/* Building the Ubidots request */
sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL);
sprintf(payload, "%s", ""); // Cleans the payload
sprintf(payload, "{\"%s\": %d}", VARIABLE_LABEL, distance); // Adds the variable label
Serial.println(topic);
/* Print the sensor reading to the Serial Monitor */
Serial.println("Publishing values to Ubidots Cloud");
Serial.print("Distance = ");
Serial.println(distance);
/* Publish the request to Ubidots */
client.publish(topic, payload);
client.loop();
delay(5000);
}