Πίνακας περιεχομένων:
- Βήμα 1: Επίδειξη
- Βήμα 2: Συναρμολόγηση
- Βήμα 3: Συναρμολόγηση - Πίνακας
- Βήμα 4: Ubidots
- Βήμα 5: Βιβλιοθήκη SimpleDHT
- Βήμα 6: Βιβλιοθήκη PubSubClient
- Βήμα 7: Βιβλιοθήκη TinyGSM
- Βήμα 8: Βιβλιοθήκη TFT_eSPI
- Βήμα 9: Βιβλιοθήκη TFT_eSPI
- Βήμα 10: Ubidots
- Βήμα 11: Αλλαγή δεδομένων στο.ino
- Βήμα 12: GPRS_ESP32_DHT.ino - Δηλώσεις και μεταβλητές
- Βήμα 13: Καρφίτσωμα
- Βήμα 14: Ρύθμιση
- Βήμα 15: SetupDisplay
- Βήμα 16: SetupGSM
- Βήμα 17: ConnectMQTTServer
- Βήμα 18: Βρόχος
- Βήμα 19: ReadDHT
- Βήμα 20: PublishMQTT
- Βήμα 21: CreateJsonString
- Βήμα 22: ShowDataOnDisplay
- Βήμα 23: Αρχεία
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Σήμερα θα συζητήσουμε για το μόντεμ GPRS, ή μάλλον, το ESP32 και τη χρήση του με το δίκτυο κινητής τηλεφωνίας. Αυτό είναι κάτι που λειτουργεί πολύ καλά. Χρησιμοποιώντας το πρωτόκολλο MQTT, στη συνέχεια θα στείλουμε δεδομένα στον πίνακα ελέγχου του Ubidots. Χρησιμοποιήστε σε αυτό το συγκρότημα μια οθόνη για ανατροφοδότηση του κυκλώματος, επιπλέον του SIM800L και ένα τσιπ κινητού τηλεφώνου. Με αυτό το έργο, επομένως, θα στείλουμε δεδομένα θερμοκρασίας και υγρασίας μέσω GPRS και MQTT και θα απεικονίσουμε τα δεδομένα σε ένα γράφημα γραμμών.
Βήμα 1: Επίδειξη
Βήμα 2: Συναρμολόγηση
Βήμα 3: Συναρμολόγηση - Πίνακας
Βήμα 4: Ubidots
Βήμα 5: Βιβλιοθήκη SimpleDHT
Στο Arduino IDE, μεταβείτε στο Sketch-> Include Library-> Manage Libraries…
Εγκαταστήστε το SimpleDHT
Βήμα 6: Βιβλιοθήκη PubSubClient
Στο Arduino IDE, μεταβείτε στο Sketch-> Include Library-> Manage Libraries…
Εγκαταστήστε το PubSubClient
Βήμα 7: Βιβλιοθήκη TinyGSM
Στο Arduino IDE, μεταβείτε στο Sketch-> Include Library-> Manage Libraries…
Εγκαταστήστε το TinyGSM
Βήμα 8: Βιβλιοθήκη TFT_eSPI
Στο Arduino IDE, μεταβείτε στο Sketch-> Include Library-> Manage Libraries…
Εγκαταστήστε το TFT_eSPI
Βήμα 9: Βιβλιοθήκη TFT_eSPI
Αλλάξτε τις καρφίτσες της οθόνης στο φάκελο lib.
Η καρφίτσα βρίσκεται στο αρχείο User_Setup.h στο
C: / Χρήστες / \ Έγγραφα / Arduino / βιβλιοθήκες / TFT_eSPI
Αλλάξτε αυτές τις προεπιλογές στις ακόλουθες τιμές στην εικόνα.
Βήμα 10: Ubidots
Συνδεθείτε στο Ubidots με το λογαριασμό σας και κάντε κλικ στο Devices
Κάντε κλικ στο κουμπί "+" στην επάνω δεξιά γωνία
Κάντε κλικ στην επιλογή Κενό
Εισαγάγετε το όνομα της συσκευής. Σημειώστε την "ετικέτα συσκευής", καθώς αυτή θα χρησιμοποιηθεί στο "θέμα" που θα χρησιμοποιήσουμε στο.ino
Στη λίστα των συσκευών, θα εμφανιστεί η συσκευή που μόλις δημιουργήσατε. Κάντε κλικ σε αυτό.
Στην οθόνη που εμφανίζεται, κάντε κλικ στο "Προσθήκη μεταβλητής". Θα εμφανιστεί ένα αναδυόμενο παράθυρο. Κάντε κλικ στο "Raw".
Κάντε κλικ στο πλαίσιο κειμένου και εισαγάγετε το όνομα της ιδιότητας.
Πρέπει να είναι ακριβώς αυτό που θα στείλουμε στο json του.ino. Επαναλάβετε αυτό για την άλλη ιδιότητα.
Επιστρέψτε στον πίνακα ελέγχου κάνοντας κλικ στο λογότυπο Ubidots.
Στον πίνακα ελέγχου, κάντε κλικ στο "Προσθήκη νέου γραφικού στοιχείου"
Στη λίστα Widgets, επιλέξτε "Διπλός άξονας"
Βήμα 11: Αλλαγή δεδομένων στο.ino
Βήμα 12: GPRS_ESP32_DHT.ino - Δηλώσεις και μεταβλητές
#define TINY_GSM_MODEM_SIM800 // Tipo de modem que estamos usando #include #include #include #include #include // Token de usuário que pegamos no Ubidots #define TOKEN "BBFF-abcdefghijklmomopo12modo (esp32_gprs é o nome do dispositivo no Ubidots) #define TOMIC "/v1.6/devices/esp32_gprs" // id do dispositivo que pegamos no painel do Ubidots #define DEVICE_ID "5c01234567890abc12345678" // URL mqtt: //things.ubidots.com "// Porta padrão do MQTT #define MQTT_PORT 1883 // Pino onde está o DHT22 #define DHT_PIN 27
Βήμα 13: Καρφίτσωμα
// Pinagem em User_Setup.h na pasta da bibliotecaTFT_eSPI display = TFT_eSPI (); // Intervalo entre os envios e refresh da tela #define INTERVAL 10000 // Canal serial que vamos usar para comunicarmos com o modem. Χρησιμοποιήστε το semper 1 HardwareSerial SerialGSM (1). TinyGsm modemGSM (SerialGSM); TinyGsmClient gsmClient (modemGSM); // Cliente MQTT, passamos a url do server, porta // e o cliente GSM PubSubClient client (MQTT_SERVER, MQTT_PORT, gsmClient); // Tempo em que o último envio/refresh foi feito uint32_t lastTime = 0; υγρασία πλωτήρα? // Variável onde iremos armazenar o valor da umidade float temperature? // Variável onde iremos armazenar o valor da temperatura SimpleDHT22 dht; // Objeto que realizará a leitura da umidade e temperatura
Βήμα 14: Ρύθμιση
void setup () {Serial.begin (115200); setupDisplay (); // Inicializa e configura o display setupGSM (); // Εγκατάσταση και διαμόρφωση του μόντεμ GSM connectMQTTServer (); // Conectamos ao mqtt server // Espera 2 segundos e limpamos o display delay (2000)? display.fillScreen (TFT_BLUE); display.setCursor (0, 0); }
Βήμα 15: SetupDisplay
void setupDisplay () {display.init (); display.setRotation (1); display.fillScreen (TFT_BLUE); // Limpa o display com a cor azul display.setTextColor (TFT_WHITE, TFT_BLUE); // Coloca o texto como branco com fundo azul display.setTextWrap (true, true); // Ativa quebra de linha display.setTextSize (1); display.setCursor (0, 0, 2); // Posicção x, y e fonte do texto display.println ("Setup Display Complete"); }
Βήμα 16: SetupGSM
void setupGSM () {display.println ("Ρύθμιση GSM …"); // Inicializamos a serial onde está o modem SerialGSM.begin (9600, SERIAL_8N1, 4, 2, false); καθυστέρηση (3000)? // Περισσότερες πληροφορίες για το μόντεμ Serial.println (modemGSM.getModemInfo ()); // Inicializa ή modem if (! ModemGSM.restart ()) {display.println ("Η επανεκκίνηση του μόντεμ GSM απέτυχε"); καθυστέρηση (10000)? ESP.restart (); ΕΠΙΣΤΡΟΦΗ; } // Espera pela rede if (! ModemGSM.waitForNetwork ()) {display.println ("Αποτυχία σύνδεσης στο δίκτυο"); καθυστέρηση (10000)? ESP.restart (); ΕΠΙΣΤΡΟΦΗ; } // Conecta à rede gprs (APN, usuário, senha) if (! ModemGSM.gprsConnect ("", "", "")) {display.println ("Αποτυχία σύνδεσης GPRS"); καθυστέρηση (10000)? ESP.restart (); ΕΠΙΣΤΡΟΦΗ; } display.println ("Επιτυχία εγκατάστασης GSM"); }
Βήμα 17: ConnectMQTTServer
void connectMQTTServer () {display.println ("Σύνδεση σε διακομιστή MQTT …"); // Μπορείτε να συνδέσετε τη συσκευή σας οριστικά εάν (client.connect (DEVICE_ID, TOKEN, "")) {// Se a conexão foi bem sucedida display.println ("Connected"); } else {// Se ocorreu algum erro display.print ("error ="); display.println (client.state ()); καθυστέρηση (10000)? ESP.restart (); }}
Βήμα 18: Βρόχος
void loop () {// Faz a leitura da umidade e temperatura readDHT (); // Σχετικά με τον διακομιστή MQTT εάν (! Client.connected ()) {// Mandamos conectar connectMQTTServer (); } // Tempo decorrido desde o boot em milissegundos unsigned long now = millis (); // Se passou o intervalo de envio if (now - lastTime> INTERVAL) {// Publicamos para o server mqtt publishedMQTT (); // Mostramos os dados χωρίς εμφάνιση showDataOnDisplay (); // Atualizamos o tempo em que foi feito o último envio lastTime = τώρα; }}
Βήμα 19: ReadDHT
void readDHT () {float t, h; // Faz a leitura da umidade e temperatura e apenas atualiza as variáveis se foi bem sucedido if (dht.read2 (DHT_PIN, & t, & h, NULL) == SimpleDHTErrSuccess) {θερμοκρασία = t; υγρασία = h? }}
Βήμα 20: PublishMQTT
void publishedMQTT () {// Cria o json que iremos enviar para o server MQTT String msg = createJsonString (); Serial.print ("Δημοσίευση μηνύματος:"); Serial.println (msg); // Publicamos no tópico int status = client.publish (ΘΕΜΑ, msg.c_str ()); Serial.println ("Status:" + String (status)); // Status 1 se sucesso ou 0 se deu erro}
Βήμα 21: CreateJsonString
String createJsonString () {String data = "{"; εάν (! isnan (υγρασία) &&! isnan (θερμοκρασία)) {data+= "\" υγρασία / ":"; δεδομένα+= συμβολοσειρά (υγρασία, 2); δεδομένα+= ","; δεδομένα+= "\" θερμοκρασία / ":"; δεδομένα+= συμβολοσειρά (θερμοκρασία, 2); } data+= "}"; επιστροφή δεδομένων? }
Βήμα 22: ShowDataOnDisplay
void showDataOnDisplay () {// Reseta a posição do cursor e mostra umidade e temperatura lidas display.setCursor (0, 0, 2); display.println ("Υγρασία:" + Χορδή (υγρασία, 2)); display.println ("Θερμοκρασία:" + Χορδή (θερμοκρασία, 2)); }
Βήμα 23: Αρχεία
Κατεβάστε τα αρχεία
ΕΓΩ ΔΕΝ