ตัวบันทึกข้อมูล ESP32 เป็นระบบการเก็บข้อมูลที่มีประสิทธิภาพซึ่งรองรับเซ็นเซอร์ลวดสั่นและเซ็นเซอร์อื่น ๆ ด้วยโปรโตคอล RS-485, TTL ในการตั้งค่าตัวบันทึกข้อมูลเป็นผู้ใช้ปลายทางคุณสามารถเสียบเข้ากับคอมพิวเตอร์ของคุณและกำหนดค่าตัวบันทึกในเว็บไซต์โดยใช้เบราว์เซอร์ สำหรับการกำหนดค่าขั้นสูงคุณสามารถตั้งโปรแกรมรหัสของคุณเองและแฟลชตัวบันทึกบนพีซีโดยใช้ platformio หรือ Arduino IDE
ใช้คู่มือนี้: https://community.platformio.org/t/redirect-esp32-log-messages-to-sd-card/33734 อัปเดต esp32-hal-log.h เพื่อกำหนด TAG
#ifdef USE_ESP_IDF_LOG
#ifndef TAG
#define TAG "myAPP"
#endif
อัปเดต platformio.ini เพื่อรวม:
build_flags= -DUSE_ESP_IDF_LOG -DCORE_DEBUG_LEVEL=5
รวมไลบรารีและคำจำกัดความต่อไปนี้:
#include "esp_log.h"
#include "esp32-hal-log.h"
#define LOG_LEVEL ESP_LOG_WARN
#define MY_ESP_LOG_LEVEL ESP_LOG_INFO
ปัญหาไดรเวอร์ Mac OS: https://arduino.stackexchange.com/questions/91111/how-to-install-ftdi-serial-drivers-on-mac
เปิดใช้งาน Async Webserver ในไฟล์
#define ELEGANTOTA_USE_ASYNC_WEBSERVER 1
สำหรับการเปิดชุดพัฒนา ESP32 ผ่าน USB จะใช้แบตเตอรี่ 18650 อย่างไรก็ตามเพื่อวัตถุประสงค์ในการผลิต PCB ที่กำหนดเองจะได้รับการออกแบบและโมดูลควรใช้พลังงานผ่าน 3V3 หรือ VIN PIN เพื่อลดการสูญเสียพลังงาน เพื่อควบคุมพลังงานแสงอาทิตย์จะใช้โล่ 18650 ช่วยอำนวยความสะดวกให้กับแหล่งจ่ายไฟของ ESP32 ลิงค์ Aliexpress นี้ให้รายละเอียดเกี่ยวกับโล่ ช่วงแรงดันไฟฟ้าอินพุตถูกระบุเป็น 5V ถึง 8V แม้ว่าการทดสอบเบื้องต้นแนะนำว่าแผงเซลล์แสงอาทิตย์ 5V นั้นใช้งานได้ การตรวจสอบเพิ่มเติมจะดำเนินการ SD ดูเหมือนจะทำงานกับพลังจาก Vin Pin กับตัวแปลงบั๊กในระหว่างนั้น
ตารางต่อไปนี้สรุปการบริโภคปัจจุบันของ ESP32 ภายใต้โหมดการทำงานต่างๆ:
| โหมด | การบริโภคในปัจจุบัน |
|---|---|
| WiFi TX, DSSS 1 Mbps, pout = +19.5 dbm | 240 MA |
| wifi tx, OFDM 54 Mbps, pout = +16 dbm | 190 Ma |
| Wifi TX, OFDM MCS7, POUT = +14 DBM | 180 Ma |
| wifi rx (ฟัง) | (95 ~ 100) MA |
| bt/ble tx, pout = 0 dbm | 130 MA |
| BT/BLE RX (ฟัง) | (95 ~ 100) MA |
ปัจจุบันการตั้งค่าประกอบด้วยแผงเซลล์แสงอาทิตย์ 0.3W 5V สองแผงสามารถจัดหาได้สูงสุด 120mA ให้กับโล่
ตัวบันทึกควรซิงค์กับเซิร์ฟเวอร์ NTP เมื่อเปิดใช้งานโดยใช้ configTime จาก time.h Library ใช้ getLocalTime(&timeinfo) เพื่อรับเวลาปัจจุบัน ฟังก์ชั่นนี้ควรเรียกภายในฟังก์ชั่นการบันทึกเพื่อให้ได้เวลาที่แน่นอน อย่างไรก็ตามเวลาจะไม่ถูกเก็บไว้หากพลังงานหายไป จำเป็นต้องมีโมดูล RTC เพื่อให้เวลาโดยไม่ต้องใช้ WiFi หลังจาก Powerloss หมายเหตุ: ไม่แน่ใจว่าการใช้งานปัจจุบัน (RTCLIB) จะสำรวจเซิร์ฟเวอร์ NTP เป็นระยะหรือไม่ อย่างไรก็ตามการใช้งานอย่างเป็นทางการโดย Espressif ทำแบบสำรวจเป็นระยะ https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/system_time.html
โปรดทราบว่าทั้ง DS1307 และหน้าจอ OLED เชื่อมต่อกับรถบัส I2C ซึ่งเป็นรถบัสเดียวกัน แต่ที่อยู่ที่แตกต่างกัน ห้องสมุดได้รับการออกแบบเพื่อให้พวกเขาสามารถสแกนบัส I2C สำหรับที่อยู่ทั่วไป ใช้คู่มือนี้: https://esp32io.com/Tutorials/ESP32-DS1307-RTC-MODULE โปรดทราบว่าโมดูล RTC ขนาดเล็กไม่ทำงานกับ 3V3 แทน VIN ควรจัดหา
เอกสาร Espressif บนตารางพาร์ติชัน: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-table.html หากใช้แพลตฟอร์มพาร์ .platformio/packages/framework-arduinoespressif32/tools/partitions ชันเริ่มต้นสามารถพบได้ในไดเรกทอรีนี้:
https://components101.com/modules/micro-sd-card-module-pinout-features-datasheet-alternatives
ไม่แน่ใจว่าการจัดเก็บไฟล์ตามวันที่อาจเพียงพอ
ฟังก์ชั่น WiFi.onEvent() ใช้เพื่อลงทะเบียนฟังก์ชั่นการโทรกลับ WiFiEvent ซึ่งจะถูกเรียกใช้เมื่อเหตุการณ์ WiFi เกิดขึ้น ในฟังก์ชั่น wifievent เราตรวจสอบเหตุการณ์ SYSTEM_EVENT_STA_DISCONNECTED ซึ่งบ่งบอกถึงการตัดการเชื่อมต่อ WiFi เมื่อเหตุการณ์นี้เกิดขึ้นเราจะเรียก reconnectToWiFi() เพื่อพยายามเชื่อมต่ออีกครั้ง ด้วยวิธีนี้ตรรกะการเชื่อมต่อใหม่จะถูกห่อหุ้มในการโทรกลับแบบ wifievent ทำให้ฟังก์ชั่น loop () ปราศจากรหัสที่เกี่ยวข้องกับการเชื่อมต่อใหม่
สิ่งที่ต้องทำ ฟังก์ชั่นนี้จะถูกเรียกใช้เมื่อคลิกสวิตช์ปุ่มกดทางกายภาพ ESP32 จะเริ่มเป็นจุดเชื่อมต่อ WiFi เพื่อให้ผู้ใช้สามารถเชื่อมต่อกับมันผ่าน WiFi เว็บไซต์การกำหนดค่าอุปกรณ์จะเสิร์ฟผ่าน WiFi https://dronebotworkshop.com/wifimanager/ อ่านปัญหานี้เพื่อเรียนรู้วิธีการลบการตั้งค่า WiFi จาก ESP32 ลิงก์ มิฉะนั้น ESP32 จะบูตและใช้การตั้งค่าก่อนหน้าโดยอัตโนมัติสามารถทำให้ยุ่งเหยิงได้
ESP32 ควรขอ IP แบบคงที่จากจุดเชื่อมต่อ (เช่นเราเตอร์ WiFi, LTE เราเตอร์); อีกวิธีหนึ่งคือการตั้งค่า IP แบบคงที่ในหน้าผู้ดูแลระบบเราเตอร์สำหรับ ESP32 เราเตอร์อาจมีที่อยู่ IP แบบไดนามิกซึ่งอาจหมดอายุทุกสองสามวันเว้นแต่จะซื้อ IP แบบคงที่จาก ISP TODO: ESP32 API เพื่ออัปเดต IP เป็นเซิร์ฟเวอร์การจัดการ
สำหรับแอพพลิเคชั่นโครงสร้างพื้นฐานทางแพ่งส่วนใหญ่ที่การตรวจสอบความหน่วงต่ำไม่สำคัญและอัตราข้อมูลไม่สูงเกินไป Lorawan ก็กลายเป็นมาตรฐานอุตสาหกรรม อย่างไรก็ตามในสถานการณ์ที่เรียกร้องอัตราข้อมูลที่สูงขึ้นตอนนี้ ESP สามารถใช้ประโยชน์จากโครงการระยะทางที่สั้นกว่า สำหรับโครงการระยะไกลวิธีการทางเลือกอาจเกี่ยวข้องกับการรวมโมเด็มเซลล์เพิ่มเติมเข้ากับแต่ละสถานีและยกเลิกการเชื่อมต่อโครงข่ายระหว่างสถานี ESP Now - Peer to Peer ESP32 Communications
การอ้างอิง: แนะนำถึง Lorawan โดย Andreas Spiess
| ด้าน | เอสเอ | ชาวลอราวัน |
|---|---|---|
| พิสัย | ระยะสั้นพื้นที่ท้องถิ่น | ระยะยาวพื้นที่กว้าง |
| การใช้พลังงาน | พลังงานต่ำ | พลังงานต่ำเป็นพิเศษ |
| อัตราข้อมูล | อัตราข้อมูลสูงเรียลไทม์ | อัตราข้อมูลต่ำปรับให้เหมาะสมสำหรับช่วง |
| ทอพอโลยี | เพียร์ทูเพียร์ (P2P) | ดาวแห่งดาวฤกษ์ |
| ความยืดหยุ่น | เครือข่ายขนาดเล็กถึงขนาดกลาง | เครือข่ายขนาดใหญ่ |
| เกี่ยวกับกฎระเบียบ | 2.4 GHz ISM Band | วง Sub-Gigahertz ISM |
| โครงสร้างพื้นฐาน | รวมอยู่ในโมดูล ESP32 เปลือยเปล่า | ต้องใช้อุปกรณ์เกตเวย์ |
หลังจากดำเนินการวิจัยปรากฏว่าการใช้งาน Lorawan ต้องใช้อุปกรณ์เกตเวย์ อย่างไรก็ตามการเลือกใช้ ESP-Now เป็นทางเลือกอื่นและช่วยให้สามารถสำรวจความเป็นไปได้ในการขยายช่วง Lorawan สามารถเพิ่มได้เมื่อมีงบประมาณ
หากเกตเวย์ LORA ไม่จำเป็นเฟิร์มแวร์สำหรับอุปกรณ์ ESP32 ทั้งหมดจะยังคงคล้ายกัน เฉพาะ "อุปกรณ์เกตเวย์" หรือสถานีหลักต้องการการปรับเปลี่ยนเพื่อจัดการการสื่อสารข้อมูลและการรวมตารางข้อมูลสำหรับคำขอ HTTP จากไคลเอนต์ระยะไกล สถานีย่อยควรยังคงสนับสนุนการสื่อสาร WiFi ในท้องถิ่นและให้บริการเว็บเพจสำหรับผู้ใช้ในพื้นที่ที่ไม่มีบริการเซลล์
อุปกรณ์จะได้รับการกำหนดค่าผ่านอินเตอร์เฟส WiFi Manager ซึ่งเป็นหลักให้บริการเว็บไซต์สำหรับผู้ใช้ในการตั้งค่าโหมด
ขอแนะนำให้ใช้บอร์ด ESP-32 DEV พร้อมการเชื่อมต่อเสาอากาศภายนอก: ESP32-WROOM-U ควรตรวจสอบโหมดระยะยาวของ ESP-Now ทั้งในเขตเมืองและในชนบท
ฟังก์ชั่นการบันทึกข้อมูลควรรองรับโหมดการบันทึกที่แตกต่างกัน อาจเป็นแบบทั่วไปตามโปรโตคอลที่ใช้: I2C, SPI, RS485 ฯลฯ การอ่านควรถูกบันทึกไว้บนอุปกรณ์ก่อนที่จะส่ง ESP-Now จำเป็นต้องมีการยืนยันก่อนที่จะลบไฟล์
เมื่อเชื่อมต่อกับอุปกรณ์ต่อพ่วงใหม่การตรวจสอบพิน GPIO นี้สามารถให้ผู้ใช้งานการตรวจสอบระยะไกลสำหรับการสร้างต้นแบบ
สิ่งที่ต้องทำยังไม่ได้ทดสอบเซ็นเซอร์ลวดสั่น, เซ็นเซอร์อะนาล็อก, SaaS ฉันต้องการมีความสามารถเดียวกัน: https://www.geo-instrument.com/technology/wireless-logger-networks/
ใช้ ESP32 VIN OUT สำหรับแหล่งจ่ายไฟมัลติมิเตอร์แสดงแรงดันไฟฟ้าประมาณ 4.5V เชื่อมต่อ ESP32 VIN กับ V33 บน VM501, GND กับ GND เริ่มต้นพอร์ต UART 1 ด้วย GPIO16 เป็น RX และ GPIO17 เป็น TX เรียกใช้ HardwareSerial VM(1); เพื่อกำหนดค่าพอร์ต UART บน ESP32 เรียกใช้ VM.begin(9600, SERIAL_8N1, 16, 17); ในการเริ่มต้นพอร์ต UART 1 ด้วย GPIO16 เป็น RX และ GPIO17 เป็น TX ฟังก์ชั่นโปรโตคอล VM.Serial UART ที่ใช้ในโครงการนี้ขึ้นอยู่กับโปรโตคอล Modbus:
ปัจจุบัน Elegantota Free เวอร์ชันฟรีใช้โดยไม่ต้องใช้ใบอนุญาตสำหรับแอปพลิเคชันเชิงพาณิชย์ Documentaion: https://docs.elegantota.pro/ สำหรับแอปพลิเคชันเชิงพาณิชย์ห้องสมุด Wrapper Arduino Ota ที่เรียบง่ายสามารถพัฒนาเพื่อหลีกเลี่ยงความสง่างาม TODO DEVELOPE เวอร์ชัน OTA ของตัวเองเพื่อหลีกเลี่ยงข้อ จำกัด ที่สำคัญอย่าลืมเปิดใช้งาน async webserver opetion ใน ElegantOTA.h ใน ./pio/libdeps/esp32dev/ElegantOTA /esp32dev/elegantota
อินสแตนซ์ของ AsyncWebserver ถูกสร้างขึ้นบนพอร์ต 80 ฟังก์ชั่นการโทรกลับถูกตั้งค่าเพื่อจัดการการร้องขอ HTTP ที่เข้ามาที่รูท ("/") โดยการตอบกลับด้วยเนื้อหาของไฟล์ที่เก็บไว้ในระบบไฟล์ Spiffs ปรับตัวแปรชื่อไฟล์เพื่อให้ตรงกับไฟล์ที่ต้องการ หลังจากกำหนดค่าเซิร์ฟเวอร์จะเริ่มต้นด้วย server.begin()
ใช้งานโดยใช้ไลบรารีการตั้งค่า H
credentials
{
"WIFI_SSID": "*********",
"WIFI_PASSWORD": "**********",
"gmtOffset_sec": "************"
}
เครื่องบันทึกหลักควรมีรายการหลักของข้อมูลระบบสถานีย่อยทั้งหมด
[
{
"macAddress": "30:83:98:00:52:8C",
"batteryVoltage": "3.7V"
},
{
"macAddress": "30:83:98:00:52:8C",
"batteryVoltage": "3.7V"
},
]
คนตัดไม้ควรมีแสงสว่างบนเส้นทาง /api/readings สำหรับการร้องขอชุดเวลา ลูกค้าสามารถระบุ sensorId , start และ end และ readingsOptions คำขอตัวอย่างควรมีลักษณะดังต่อไปนี้:
/api/readings?sensorId=238&start=2024-02-06T13:40:00&end=2024-02-13T13:40:00&readingsOptions=0
สร้างโดย Qiwei Mao
การสอนแบบสุ่ม nerd: https://randomnerdtutorials.com/projects-esp32/ dashboard: https://github.com/ayushsharma82/esp-dash Github อ้างอิง