Arduino Uno ו-ESP32 הם שני מיקרו-בקרים פופולריים המשמשים למגוון רחב של פרויקטים אלקטרוניים. בעוד שה-Arduino Uno מתאים למתחילים ולפרויקטים בסיסיים, ה-ESP32 מציע יכולות מתקדמות יותר כמו Wi-Fi ו-Bluetooth מובנים.
השוואה בין Arduino Uno ל-ESP32 Arduino Uno מעבד: ATmega328P (16 MHz) זיכרון RAM: 2KB זיכרון Flash: 32KB פינים דיגיטליים: 14 פינים אנלוגיים: 6 ESP32 מעבד: Dual-core Xtensa LX6 (240 MHz) זיכרון RAM: 520KB זיכרון Flash: עד 16MB פינים דיגיטליים: עד 34 פינים אנלוגיים: עד 18 Wi-Fi ו-Bluetooth מובנים ניהול זיכרון מתקדם Arduino Uno // שימוש ב-PROGMEM לשמירת מחרוזות בזיכרון התוכנית const char text[] PROGMEM = "טקסט ארוך שיישמר בזיכרון Flash"; // שימוש ב-malloc ו-free לניהול זיכרון דינמי int* dynamicArray = (int*)malloc(10 * sizeof(int)); free(dynamicArray); ESP32 // שימוש ב-PSRAM (אם קיים) #include <esp_heap_caps.h> void* ptr = heap_caps_malloc(1000, MALLOC_CAP_SPIRAM); // שימוש ב-Non-Volatile Storage (NVS) #include <Preferences.h> Preferences preferences; preferences.begin("my-app", false); preferences.putInt("counter", 42); קושחות מותאמות אישית Arduino Uno שימוש ב-Arduino IDE עם Bootloader מותאם: avrdude -c arduino -p atmega328p -P COM3 -b 115200 -U flash:w:custom_firmware.hex ESP32 בניית קושחה מותאמת עם ESP-IDF: idf.py menuconfig idf.py build idf.py -p COM3 flash שימוש ב-esptool לצריבת קושחה: esptool.py --port COM3 write_flash 0x1000 custom_firmware.bin MicroPython התקנת MicroPython על ESP32 esptool.py --port COM3 erase_flash esptool.py --port COM3 write_flash -z 0x1000 esp32-20220117-v1.18.bin דוגמת קוד MicroPython from machine import Pin import time led = Pin(2, Pin.OUT) while True: led.value(not led.value()) time.sleep(1) תקשורת אלחוטית ESP32 Wi-Fi דוגמת קוד #include <WiFi.h> const char* ssid = "MyNetwork"; const char* password = "MyPassword"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("מתחבר ל-WiFi..."); } Serial.println("מחובר!"); Serial.println(WiFi.localIP()); } חיישנים ופלטים מתקדמים דוגמת קוד ל-I2C #include <Wire.h> void setup() { Wire.begin(); Serial.begin(115200); } void loop() { Wire.beginTransmission(0x68); // כתובת I2C של החיישן Wire.write(0x6B); // רגיסטר Power Management Wire.write(0); // מפעיל את החיישן Wire.endTransmission(true); Wire.requestFrom(0x68, 14, true); // קריאת נתונים מהחיישן // עיבוד הנתונים... } דוגמאות קוד דוגמה 1: מערכת RTOS על ESP32 #include <freertos/FreeRTOS.h> #include <freertos/task.h> void Task1(void * parameter) { for(;;) { Serial.println("Task 1"); vTaskDelay(1000 / portTICK_PERIOD_MS); } } void Task2(void * parameter) { for(;;) { Serial.println("Task 2"); vTaskDelay(2000 / portTICK_PERIOD_MS); } } void setup() { Serial.begin(115200); xTaskCreatePinnedToCore(Task1, "Task1", 10000, NULL, 1, NULL, 0); xTaskCreatePinnedToCore(Task2, "Task2", 10000, NULL, 1, NULL, 1); } void loop() { // הלולאה הראשית ריקה כי אנחנו משתמשים ב-RTOS } טיפים מתקדמים השתמשו ב-Serial.printf() על ESP32 לפלט יעיל יותר: Serial.printf("ערך חיישן: %d, טמפרטורה: %.2f\n", sensorValue, temperature); שימוש ב-Deep Sleep למקסום חיי סוללה: #define uS_TO_S_FACTOR 1000000 // המרה ממיקרו-שניות לשניות #define TIME_TO_SLEEP 5 // זמן שינה בשניות void setup() { esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); esp_deep_sleep_start(); } שימוש ב-watchdog timer למניעת קריסות: #include <esp_task_wdt.h> void setup() { esp_task_wdt_init(30, true); // מאתחל watchdog של 30 שניות esp_task_wdt_add(NULL); // מוסיף את הליבה הנוכחית למעקב } void loop() { esp_task_wdt_reset(); // מאפס את ה-watchdog // קוד נוסף... }ארדואינו
4
נושאים
6
פוסטים
-
מדריך | מדריך מקיף לעולם הארדואינו
במעקב התעלמות מתוזמן נעוץ נעול הועבר0 הצבעות2 פוסטים30 צפיות -
הכרה בסיסית של ארדואינו אונו
במעקב התעלמות מתוזמן נעוץ נעול הועבר0 הצבעות2 פוסטים10 צפיות -
מדריך | מדריך מקיף לארדואינו
במעקב התעלמות מתוזמן נעוץ נעול הועבר0 הצבעות1 פוסטים2 צפיות -
מדריך | עולם ה-Arduino וה-IoT
במעקב התעלמות מתוזמן נעוץ נעול הועבר0 הצבעות1 פוסטים3 צפיות