Przeszukaj forum
Pokazywanie wyników dla tagów 'OneWire'.
Znaleziono 1 wynik
-
Cześć, próbuję skompilować własny szkic nadajnika (TX) dla Heltec WiFi LoRa 32 V3 w Arduino IDE, korzystając z Heltec ESP32 SDK 3.0.3. Kod używa następujących bibliotek: LoRaWan_APP.h (inicjalizacja przez Mcu.begin() + API radia), HT_SSD1306Wire.h (OLED), czujnik DS18B20, OneWire + DallasTemperature. Na starszych wersjach SDK wszystko działało, natomiast na SDK 3.0.3 kompilacja kończy się błędem: Library Heltec ESP32 Dev-Boards has been declared precompiled: Using precompiled library in c:\Users\x\Documents\Arduino\libraries\Heltec_ESP32_Dev-Boards\src\esp32s3 In file included from .../esp32-hal.h:75, from .../Arduino.h:36, from ...\OneWire.cpp:147: ...\OneWire_direct_gpio.h: In function 'void directModeInput(uint32_t)': ...\esp32-hal-gpio.h:67:34: error: 'GPIO_IS_VALID_GPIO' was not declared in this scope; did you mean 'RTC_GPIO_IS_VALID_GPIO'? 67 | #define digitalPinIsValid(pin) GPIO_IS_VALID_GPIO(pin) | ^~~~~~~~~~~~~~~~~~ ... exit status 1 Wygląda na to, że OneWire korzysta z makra GPIO_IS_VALID_GPIO, które w nowym HAL dla ESP32‑S3 (SDK 3.x) już nie istnieje. W efekcie nie da się skompilować żadnego szkicu z klasyczną biblioteką OneWire. Pytania Czy OneWire jest oficjalnie nieobsługiwane w SDK 3.x? Czy istnieje jakiś patch lub obejście tego problemu? Czy powinienem przejść na inną bibliotekę (np. OneWireNg) – czy jest to rekomendowane rozwiązanie? Czy Heltec planuje przywrócić kompatybilność (GPIO_IS_VALID_GPIO) w kolejnych wersjach SDK? Kontekst Mój pełny szkic nadajnika LoRa z DS18B20 wygląda tak: // ------------------------------------------------------------------- // Heltec ESP32 LoRa V3 Transmitter (TX) - WERSJA FINALNA Z DS18B20 // Używa Heltec SDK do poprawnej inicjalizacji OLED i LoRa. // ------------------------------------------------------------------- // --- NAGŁÓWKI SYSTEMOWE I LORA --- #include "Arduino.h" #include "LoRaWan_APP.h" // KLUCZOWA BIBLIOTEKA DLA Mcu.begin() // --- NAGŁÓWKI WYŚWIETLACZA --- #include <Wire.h> #include "HT_SSD1306Wire.h" // --- NAGŁÓWKI CZUJNIKA DS18B20 --- #include <OneWire.h> #include <DallasTemperature.h> // --- KONFIGURACJA CZUJNIKA --- #define ONE_WIRE_BUS 4 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // --- KONFIGURACJA WYSWIETLACZA --- static SSD1306Wire display(0x3c, 500000, SDA_OLED, SCL_OLED, GEOMETRY_128_64, RST_OLED); // --- KONFIGURACJA LORA --- #define RF_FREQUENCY 868000000 #define TX_OUTPUT_POWER 14 #define LORA_BANDWIDTH 0 #define LORA_SPREADING_FACTOR 7 #define LORA_CODINGRATE 1 #define LORA_PREAMBLE_LENGTH 8 #define LORA_IQ_INVERSION_ON false #define BUFFER_SIZE 30 #define TX_INTERVAL 5000 // Co 5 sekund // --- ZMIENNE LORA TX --- char txpacket[BUFFER_SIZE]; static RadioEvents_t RadioEvents; float currentTemperature; // Zmienna globalna dla temperatury // ------------------------------------------------- // --- FUNKCJE POMOCNICZE (VEXT I LORA HANDLERY) --- // ------------------------------------------------- // Funkcje VextON/VextOFF z Twojego działającego kodu void VextON(void) { pinMode(Vext, OUTPUT); digitalWrite(Vext, LOW); } void VextOFF(void) { pinMode(Vext, OUTPUT); digitalWrite(Vext, HIGH); } /** * @brief Funkcja wywoływana po udanym wysłaniu pakietu LoRa (IRQ Handler). */ void OnTxDone(void) { Radio.Sleep( ); Serial.println("TX Done callback."); } /** * Odczytuje temperaturę z DS18B20. */ float getTemperature() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); if (tempC == DEVICE_DISCONNECTED_C) { return -999.0; } return tempC; } /** * Aktualizuje wyświetlacz OLED nowymi danymi. */ void updateDisplay(String statusLine) { String tempStr = (currentTemperature != -999.0) ? String(currentTemperature, 2) + " C" : "--- BLAD ---"; display.clear(); display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); display.setColor(WHITE); display.drawString(0, 0, "Nadajnik LoRa (SDK)"); display.drawHorizontalLine(0, 10, 128); display.setFont(ArialMT_Plain_16); display.drawString(0, 15, tempStr); display.setFont(ArialMT_Plain_10); display.drawString(0, 40, statusLine); display.drawString(0, 52, "Czekam " + String(TX_INTERVAL / 1000) + " s..."); display.display(); } // ------------------------------------------------- // --- ARDUINO SETUP --- // ------------------------------------------------- void setup() { Serial.begin(115200); delay(2000); // 1. RĘCZNY RESET I STABILIZACJA ZASILANIA VEXT (KLUCZOWE DLA OLED) VextOFF(); delay(10); VextON(); delay(500); // 2. Mcu.begin() - KLUCZOWA INICJALIZACJA GPIO I I2C Mcu.begin(HELTEC_BOARD, SLOW_CLK_TPYE); // 3. Inicjalizacja wyświetlacza OLED display.init(); display.setContrast(255); display.setFont(ArialMT_Plain_10); updateDisplay("Inicjalizacja..."); // 4. Inicjalizacja czujnika sensors.begin(); // 5. INICJALIZACJA RADIA LORA (SDK) RadioEvents.TxDone = OnTxDone; Radio.Init( &RadioEvents ); Radio.SetPublicNetwork(false); Radio.SetChannel( RF_FREQUENCY ); Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, RF_FREQUENCY, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, LORA_PREAMBLE_LENGTH, LORA_IQ_INVERSION_ON, false, 0, 0, false, 3000 ); updateDisplay("Radio OK. Czekam..."); } // ------------------------------------------------- // --- ARDUINO LOOP --- // ------------------------------------------------- void loop() { // 1. Pomiar temperatury currentTemperature = getTemperature(); if (currentTemperature != -999.0) { // 2. Tworzenie wiadomości (wysyłamy tylko surową wartość) String payload = String(currentTemperature); payload.toCharArray(txpacket, BUFFER_SIZE); // 3. Wysłanie pakietu Serial.printf("\r\nWysylanie: %s, dlugosc %d\r\n", txpacket, strlen(txpacket)); updateDisplay("Wysylam: " + payload); Radio.Send( (uint8_t *)txpacket, strlen(txpacket) ); // 4. Oczekiwanie na zakończenie transmisji Radio.IrqProcess( ); // 5. Aktualizacja statusu updateDisplay("Wyslano OK."); } else { Serial.println("\r\nBlad odczytu czujnika!"); updateDisplay("BLAD CZUJNIKA."); } // 6. Opóźnienie przed kolejną wysyłką delay(TX_INTERVAL); } Na starszym SDK działało bez problemu, teraz kompilacja zatrzymuje się na błędzie w OneWire. Przypakiem przy kolejnej próbie zmiany płytki lub biblioteki kompilacja powiodla się i kod działał. Niestety nie wiem co się zmieniło i co miało na to wpływ ale teraz nie kompiluje się. Czy ktoś z Was uruchamiał DS18B20 na Heltec V3 z SDK 3.0.3? Czy jedynym wyjściem jest zmiana biblioteki (np. OneWireNg), czy może Heltec planuje poprawkę w SDK? Zależy mi na tym, żeby zostać przy DS18B20 – ale jeśli nie ma wsparcia, rozważę zmianę czujnika. Z góry dzięki za wszelkie wskazówki!
