Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
In questo tutorial spiegherò il rilevamento del movimento utilizzando un sensore PIR e Esp32 insieme a una piattaforma cloud IOT Thingai.io
Passaggio 1: componenti
COMPONENTI HARDWARE;
Scheda di sviluppo 1.esp32
2. Sensore PIR
3. Cavi dei ponticelli
SOFTWARE:
1. Arduino IDE
2. Account Thingsai.io
Fase 2: CONNESSIONI
I collegamenti sono abbastanza semplici.
PIN PIR ------------ PIN ESP32
VCC--------------------3V3 su esp32
GND------------------GND su esp32
OUT-------------------D22 su esp32
Passaggio 3: CODIFICA
Incolla questo codice nel tuo IDE Arduino con qualche aggiornamento, il tuo sensore di movimento fornirà l'output in modo impeccabile.
#includere
#includere
#includere
int conteggio=0, i, m, j, k;
int t, t1, t2, t3;
int pin = 22;
//////////////////////////////////////// TUTTE LE DICHIARAZIONI per CLOUD ////// ////////////////////////
const char* host = "api.thingsai.io"; // OPPURE host = devapi2.thethingscloud.com
const char* post_url = "/devices/deviceData"; // OPPURE /api/v2/thingscloud2/_table/data_ac
const char* time_server = "baas.thethingscloud.com"; //questo serve per convertire il timestamp
const int httpPort = 80;
const int httpsPort = 443;
const char* server = "api.thingsai.io"; // URL del server
char timestamp[10];
WiFi Multi WiFi Multi;
// Usa la classe WiFiClient per creare connessioni TCP
client WiFi Client;
/////////////////////////////////////// Funzione CALCOLO ORA//////// ///////////////////////////////
int GiveMeTimestamp()
{
timeout lungo senza segno = millis();
//client WiFiClient;
while (client.disponibile() == 0)
{
if (millis() - timeout > 50000)
{
cliente.stop();
restituisce 0;
}
}
mentre (client.disponibile())
{
Stringa riga = client.readStringUntil('\r'); //indexOf() è una funzione per cercare smthng, restituisce -1 se non trovata
int pos = line.indexOf("\"timestamp\""); //cerca "\"timestamp\"" dall'inizio della risposta ottenuta e copia tutti i dati dopo, sarà il tuo timestamp
se (pos >= 0)
{
intj = 0;
for(j=0;j<10;j++)
{
timestamp[j] = riga[pos + 12 + j];
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
configurazione nulla()
{
Serial.begin(115200);
ritardo(10);
pinMode(pin, INGRESSO);
// Iniziamo connettendoci a una rete WiFi
WiFiMulti.addAP("nome_wifi", "password_Wifi");
Serial.println();
Serial.println();
Serial.print("Attendi WiFi… ");
while(WiFiMulti.run() != WL_CONNECTED) {
Serial.print(".");
ritardo (500);
}
Serial.println("");
Serial.println("WiFi connesso");
Serial.println("Indirizzo IP: ");
Serial.println(WiFi.localIP());
ritardo (500);
}
ciclo vuoto()
{
int AnalogValue = analogRead(outputpin);
{
////////////////////////////////////// INVIARE LA DOMANDA E RICEVERE LA RISPOSTA//// ///////////////////
{
bool isDetected = digitalRead(pin);
if(isDetected){
Serial.println("Presenza rilevata");
}
ritardo (500);
}
Serial.print("connessione a ");
Serial.println(host); // rialzo definito: - host = devapi2.thethingscloud.com o 139.59.26.117
//////////////////////////////////// SNIPPET DEL CODICE TIMESTAMP ////////// ///////////////
Serial.println("inside ottieni timestamp\n");
if (!client.connect(time_server, {
Restituzione; //*-*-*-*-*-*-*-*-*-*
}
client.println("OTTIENI /api/timestamp HTTP/1.1"); //Cosa sta facendo questa parte, non l'ho capito
client.println("Host: baas.thethingscloud.com");
client.println("Cache-Control: no-cache");
client.println("Token postino: ea3c18c6-09ba-d049-ccf3-369a22a284b8");
client.println();
GiveMeTimestamp(); // chiamerà la funzione che otterrà la risposta del timestamp dal server
Serial.println("timestamp ricevuto");
Serial.println(timestamp);
Serial.println("dentro ThingsCloudPost");
String PostValue = "{"device_id\": 61121695839, \"slave_id\": 2";
PostValue = PostValue + ", \"dts\":" + timestamp;
PostValue = PostValue +", \"data\":{"PIR\":" + pin +"}"+"}";
Serial.println(PostValue);
/* crea un'istanza di WiFiClientSecure */
client WiFiClientSecure;
Serial.println("Connetti al server tramite la porta 443");
if (!client.connect(server, 443)){
Serial.println("Connessione fallita!");
} altro {
Serial.println("Connesso al server!");
/* crea una richiesta HTTP */
client.println( POST /devices/deviceData
client.println("Host: api.thingsai.io");
//client.println("Connessione: chiudi");
client.println("Tipo di contenuto: application/json");
client.println("cache-control: no-cache");
client.println( Autorizzazione: Portatore eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlkXNqC2PNTy);
client.print("Lunghezza contenuto: ");
client.println(PostValue.length());
client.println();
client.println(PostValue);
/////////////////////////////////POSTARE i dati sul cloud è fatto e ora ottieni il modulo di risposta cloud server//////////////////
Serial.print("In attesa di risposta");
mentre (!client.available()){
ritardo(50); //
Serial.print(".");
}
/* se i dati sono disponibili, riceve e stampa su Terminale */
mentre (client.disponibile()) {
char c = client.read();
Serial.write(c);
}
/* se il server si è disconnesso, ferma il client */
if (!client.connected()) {
Serial.println();
Serial.println("Server disconnesso");javascript:;
cliente.stop();
}
}
Serial.println("////////////////////// LA FINE ///////////////////// ");
ritardo (3000);
}
}
Fase 4: USCITA
Questa è la rappresentazione del grafico a barre dei valori letti dal sensore nella piattaforma thingsai, io cloud,
Passaggio 5: grafico
Questa è la rappresentazione grafica dei valori del sensore. Dal grafico sopra possiamo analizzare l'applicazione del sensore. Grazie