Skocz do zawartości

Arduino - prośba o pomoc


AdamK

Rekomendowane odpowiedzi

W mojej zdalnie sterowanej budce astrofotograficznej zainstalowałem ostatnio stację pogodową mierzącą między innymi takie parametry jak: temperatura nieba, temperatura otoczenia, ciśnienie, wilgotność. W domu na stole wszystko działalo OK, jednak po zainstalowaniu w zdalnym komputerze aplikacji Arduino i przeniesieniu tam softu do obsługi stacji pogodowej mam problem z Zwerfikowaniem programu. Problem dotyczy czujnika BME280. Żeby się upewnić, że to rzeczywiście dotyczy tylko tego elementu, załadowałem krótki program, który używa tylko tego elementu i okazuje się, że opis błędów jest taki sam... Na moim komputerze w domu werfikacja przebiega bez problemu.

Czy na podstawie opisów błędów, który zamieszczam poniżej w całości, ktoś z Kolegów znających Arduino mógłby mi wskazać o co chodzi, bo nie rozumiem na czym polega problem i nie wiem co mam poprawić?

 

 

In file included from C:\Users\astro-komputer\Documents\Arduino\test1\test1.ino:3:0:

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:111:53: error: expected class-name before '{' token

 class Adafruit_BME280_Temp : public Adafruit_Sensor {

                                                     ^

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:116:17: error: 'sensors_event_t' has not been declared

   bool getEvent(sensors_event_t *);

                 ^~~~~~~~~~~~~~~

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:117:18: error: 'sensor_t' has not been declared

   void getSensor(sensor_t *);

                  ^~~~~~~~

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:125:57: error: expected class-name before '{' token

 class Adafruit_BME280_Pressure : public Adafruit_Sensor {

                                                         ^

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:130:17: error: 'sensors_event_t' has not been declared

   bool getEvent(sensors_event_t *);

                 ^~~~~~~~~~~~~~~

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:131:18: error: 'sensor_t' has not been declared

   void getSensor(sensor_t *);

                  ^~~~~~~~

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:139:57: error: expected class-name before '{' token

 class Adafruit_BME280_Humidity : public Adafruit_Sensor {

                                                         ^

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:144:17: error: 'sensors_event_t' has not been declared

   bool getEvent(sensors_event_t *);

                 ^~~~~~~~~~~~~~~

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:145:18: error: 'sensor_t' has not been declared

   void getSensor(sensor_t *);

                  ^~~~~~~~

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:240:3: error: 'Adafruit_Sensor' does not name a type; did you mean 'Adafruit_BME280'?

   Adafruit_Sensor *getTemperatureSensor(void);

   ^~~~~~~~~~~~~~~

   Adafruit_BME280

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:241:3: error: 'Adafruit_Sensor' does not name a type; did you mean 'Adafruit_BME280'?

   Adafruit_Sensor *getPressureSensor(void);

   ^~~~~~~~~~~~~~~

   Adafruit_BME280

C:\Users\astro-komputer\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:242:3: error: 'Adafruit_Sensor' does not name a type; did you mean 'Adafruit_BME280'?

   Adafruit_Sensor *getHumiditySensor(void);

   ^~~~~~~~~~~~~~~

   Adafruit_BME280

exit status 1

Błąd kompilacji dla płytki Arduino Uno.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Zainstaluj tę samą wersję kompilatora na tych komputerach a dokładniej tę, która Ci działa w domu na tamtym komputerze. Dla ułatwienia - skopiuj sobie sam katalog Arduino z kompilatorem i możesz

go śmiało odpalić z dowolnej ścieżki na innym PC ale uwaga, biblioteki również trzeba skopiować i są one przeważnie w Moje Dokumenty (też katalog Arduino)

 

Spotykałem się z podobnymi bolączkami różnych wesji kompilatora - jak dla mnie wersja 1.8.5 działała całkiem niezawodnie.

 

Z drugiej strony ... po co Ci kompilator w miejscu wykonawczym :) ? Nie prościej "wypluwać" to po RS-sie (USB) ? A tak w ogóle to zainteresuj się platformami ESP8266 ...  o wiele lepsze i większe możliwości 

 

https://lastminuteengineers.com/bme280-esp8266-weather-station/

  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki ! Spróbuję zrobić tak jak mówisz i zrobię kopię Arduino i bibliotek z mojego komputera i przeniosę na komputer w budce.

 

Jednak nie bardzo rozumiem co masz na myśli pisząc:

1 godzinę temu, komprez napisał:

Z drugiej strony ... po co Ci kompilator w miejscu wykonawczym :) ? Nie prościej "wypluwać" to po RS-sie (USB) ?

Po prostu nie znam się... :no:

Odnośnik do komentarza
Udostępnij na innych stronach

No generalnie projektując układy wykonawcze np arduino, robisz to pod jakąś tam platformę .. np port szeregory RS232 i dalej jak się to mówi "w Świat". Poprzestając na kompilatorze (który jak mniemam .. używasz tylko do odczytu danych z czujników) to jest takie trochę kupie sobie auto ale będę nim jeździć w miejscu na podniesionych kołach :) w taki sposób nie rozwijasz projektu ... zatrzymujesz się na tzw deweloperce gdzie tylko testuje się programy pod takim kompilatorem po to aby móc sobi szybko modyfikować kod wrazie co.

 

Arduino to już dla mnie przeżytek niestety .. no chyba że ktoś potrzebuję i lubi się w to bawić to jak najbardziej OK, ale od kiedy przesiadłem się na ESPEasy i ESPMega wliczając w to ESPHome = masa oszczędzonego czasu... Arduino dla mnie to taki Trabant (nie obrażając oczywiście super mydelniczki) w dzisiejszych czasach :) Ile się trzeba naklepać ten tylko się dowie kto ... no właśnie :D a tu czas.. czas .. i czas....

 

EDIT : dodam tylko oczywiście że KAŻDY powinien zacząć od Arduino aby wiedzieć co z czym się "je" ... a jeszcze bardziej super jak ktoś zaczynał od Atmegi ... tak jak ja np ...  generalnie powinno się zawsze "wychodzić" od C++ ... to podwalina całego programowania

Edytowane przez komprez
Odnośnik do komentarza
Udostępnij na innych stronach

Rozumiem Twój sposób rozumowania i się z nim zgadzam... jednak dla mnie, który kiedyś zaniedbał, a może nie było to mi potrzebne, te wszystkie platformy to w sumie czarna magia i nie czas już teraz na zaległą naukę, choćby z racji "zaawansowanego" pesela. Obecnie Arduino ma być dla mnie tylko środkiem do celu jakim jest odczyt danych ze stacji pogodowej. Z braku wiedzy korzystam z gotowego kodu, który udało mi się dostosować do moich potrzeb. I to wszystko...

Rozumiem, że można używać Arduino bez kompilatora, jednak dla zobrazowania wyników potrzebuję okno portu szeregowego lub okienko kreślarki, które są częścią kompilatora. Nie jest dla mnie ważne, że rozwiązanie to jest jak ten Trabant... jeśli będzie działało, będzie OK.

Niestety nadal nie jestem w stanie załadować kodu do pamięci Arduino, ponieważ nie przechodzi weryfikacji. Jutro spróbuję przenieść program z jednego komputera, na drugi i zobaczymy...

Odnośnik do komentarza
Udostępnij na innych stronach

Błąd (naiwnie mówiąc) to niezdefiniowana nazwa "Adafruit_Sensor". 

Powinna być zdefiniowana tutaj:

#include <Adafruit_Sensor.h>

Wieść niesie że trzeba mieć do tego zainstalowaną bibliotekę Unified Adafruit Sensor czy coś.

 

Ale może jest tylko zawartość pliku jest pusta? ;) Masz komunikat, że nie znalazło pliku .h?

 

 

@komprez

Teraz ludzie - zauważyłem u mnie w firmie, gdzie sporo jest studentów - zaczynają od STM32 i ma to taki plus że realnie przydaje się w karierze zawodowej. Jestem programistą C++, ale zdecydowanie wolę Pythona. Zresztą tak jak każdy chyba w branży :)

Ale to już temat na inną dyskusję... ;) 

 

 

  • Lubię 3
Odnośnik do komentarza
Udostępnij na innych stronach

Masz rację ;) STM-a gdzies nawet mam ale nie przypadł mi do gustu ... sęk w tym że nie robię aż tak bardzo skomplikowanych projektów i chyba całe szczęście bo jak sobie przypomnę choćby nawet mój projekt dekodera RDS na 2-óch Atmegach ponad 10 lat temu .. i ile czasu to pochłonęło to .... 

Odnośnik do komentarza
Udostępnij na innych stronach

2 godziny temu, komprez napisał:

Wklej tu ten kod. Gdzie chcesz odczytywać te dane ? tzn konkretniej : konsola w PC, wyświetlacz, strona web. Postaram Ci się pomóc najprościej jak się da :)

Kod jest OK, bo weryfikacja przeprowadzona na moim domowym komputerze przebiega prawidłowo. Jest to prosty kod zerżnięty z sieci (nie pamiętam już skąd), mam nadzieję, że autor nie będzie miał mi za złe. Załączam go poniżej. Wyniki wyświetlają się na monitrze komputera.

 

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme;

void setup() {
  Serial.begin(9600);

  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}


void loop() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println("*C");

  Serial.print("Pressure = ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println("hPa");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println("m");

  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println("%");

  Serial.println();
  delay(1000);
}
 

1 godzinę temu, Behlur_Olderys napisał:

Błąd (naiwnie mówiąc) to niezdefiniowana nazwa "Adafruit_Sensor". 

Powinna być zdefiniowana tutaj:

#include <Adafruit_Sensor.h>

Wieść niesie że trzeba mieć do tego zainstalowaną bibliotekę Unified Adafruit Sensor czy coś.

 

Ale może jest tylko zawartość pliku jest pusta? ;) Masz komunikat, że nie znalazło pliku .h?

Patrząc na kod, wygląda że "Adafruit_Sensor" jest zdefiniowany prawidłowo. Popatrzę jeszcze raz, czy o czymś nie zapomniałem w bibliotekach...

Odnośnik do komentarza
Udostępnij na innych stronach

13 minut temu, AdamK napisał:

Patrząc na kod, wygląda że "Adafruit_Sensor" jest zdefiniowany prawidłowo. Popatrzę jeszcze raz, czy o czymś nie zapomniałem w bibliotekach...

 

Zawsze możesz zmienić nawiasy:

#include <Adafruit_Sensor.h>

na:

#include "Adafruit_Sensor.h"

I skopiować ten plik (najlepiej  oba: Adafruit_Sensor.h i Adafruit_Sensor.cpp) do tego samego katalogu, co plik .ino.

Oczywiście, to partyzantka, taśma klejąca i pewnie początek nowych problemów ale można spróbować ;)

Odnośnik do komentarza
Udostępnij na innych stronach

3 godziny temu, Behlur_Olderys napisał:

 

Zawsze możesz zmienić nawiasy:

#include <Adafruit_Sensor.h>

na:

#include "Adafruit_Sensor.h"

I skopiować ten plik (najlepiej  oba: Adafruit_Sensor.h i Adafruit_Sensor.cpp) do tego samego katalogu, co plik .ino.

Oczywiście, to partyzantka, taśma klejąca i pewnie początek nowych problemów ale można spróbować ;)

Spróbowałem... faktycznie, początek nowych problemów...

  • Haha 1
Odnośnik do komentarza
Udostępnij na innych stronach

Mam tylko jedno pytanie: dlaczego musisz ładować program na Arduino na komputerze w obserwatorium? Jeżeli załadujesz program w domu, to on tam będzie i będzie wysyłał dane na port. Jeżeli musisz (chcesz) odbierać to przez aplikację Arduino, to wystarczy, że postawisz ją na komputerze, otworzysz monitor/kreślarkę i informacje powinny spływać. 

  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Waszym sugestiom Koledzy, udało mi się w końcu znaleźć przyczynę problemów i teraz wszystko działa jak należy.

Przyczyną błędów, była niekompletna lub źle działąjąca biblioteka Adafruit_Unified_Sensor. Na pierwszy rzut oka wyglądało OK...

Teraz mam prawidłowy odczyt parametrów pogodowych:

 

image.png.f5f09cfc18c5e5f82f18dcbea69583fd.png

 

Dziękuję Wam za pomoc!

  • Kocham 1
Odnośnik do komentarza
Udostępnij na innych stronach

9 minut temu, GrzegorzP napisał:

Mam tylko jedno pytanie: dlaczego musisz ładować program na Arduino na komputerze w obserwatorium? Jeżeli załadujesz program w domu, to on tam będzie i będzie wysyłał dane na port. Jeżeli musisz (chcesz) odbierać to przez aplikację Arduino, to wystarczy, że postawisz ją na komputerze, otworzysz monitor/kreślarkę i informacje powinny spływać. 

Tak właśnie robię: z domu, zdalnie ładuję program do komputera w obserwatorium. Zdalnie uruchamiam Arduino, a program pokazuje wyniki pomiarów na monitorze portu szeregowego lub kreślarce. Monitor komputera w obserwatorium widzę u siebie poprzez AnyDeska.

Jednak problemem nie było ładowanie programu do Arduino, tylko to co dzieje się krok wcześniej: weryfikacja / kompilacja kodu.

Problem rozwiązany...

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, AdamK napisał:

Tak właśnie robię: z domu, zdalnie ładuję program do komputera w obserwatorium. Zdalnie uruchamiam Arduino, a program pokazuje wyniki pomiarów na monitorze portu szeregowego lub kreślarce. Monitor komputera w obserwatorium widzę u siebie poprzez AnyDeska.

Jednak problemem nie było ładowanie programu do Arduino, tylko to co dzieje się krok wcześniej: weryfikacja / kompilacja kodu.

Problem rozwiązany...

 

Jak rozumiem już działa, ale tak dla pełnej jasności: jeżeli w domu załadowałeś program do Arduino, to on jest w pamięci i działa. W obserwatorium niczego nie musisz kompilować (weryfikować) ani ładować. Wystarczy połączyć z komputerem, odpalić monitor/kreślarkę z oprogramowania (lub jakikolwiek inny terminal obsługujący COM-a) i możesz monitorować to co przesyła. Chyba, że masz dwa Arduino - jedno testujesz w domu, a drugie na stałe w obserwatorium.

Edytowane przez GrzegorzP
Odnośnik do komentarza
Udostępnij na innych stronach

56 minut temu, GrzegorzP napisał:

 

Jak rozumiem już działa, ale tak dla pełnej jasności: jeżeli w domu załadowałeś program do Arduino, to on jest w pamięci i działa. W obserwatorium niczego nie musisz kompilować (weryfikować) ani ładować. Wystarczy połączyć z komputerem, odpalić monitor/kreślarkę z oprogramowania (lub jakikolwiek inny terminal obsługujący COM-a) i możesz monitorować to co przesyła. Chyba, że masz dwa Arduino - jedno testujesz w domu, a drugie na stałe w obserwatorium.

Przecież żeby w obserwatorium odpalić monitor/kreślarkę, to najpierw muszę uruchomić tam program Arduino, tak czy nie...? Monitor sam z siebie nie działa przecież.

Może nie znam się na tych wynalazkach w rodzaju Arduino, ale jak wyobrażasz sobie program Arduino odpalony w domu, który monitoruje urządzenie (płytkę Arduino Uno), która jest zainstalowana w obserwatorium. Opisz to dokładnie... Może wiesz coś o czym ja sobie nie zdawałem sprawy...?

Odnośnik do komentarza
Udostępnij na innych stronach

6 minut temu, AdamK napisał:

ale jak wyobrażasz sobie program Arduino odpalony w domu, który monitoruje urządzenie (płytkę Arduino Uno), która jest zainstalowana w obserwatorium

skoro pisałeś ze masz dostęp do pulpitu przez anydesk to po prostu arduino też by wysyłało by przez sieć a programem który odbiera, żeby nie utrudniać sobie życia powinna byc przeglądarka odpalona gdziekolwiek czy to na komputerze czy telefonie. ale to tak się fajnie pisze, a typowo pierwsza z brzegu płytka nie ma takich możliwości, musi być taka z obsługą sieci.

Odnośnik do komentarza
Udostępnij na innych stronach

Wydaje mi się, że Arduino Uno nie ma takiej możliwości. 

Tworząc swoją zdalnie sterowaną budkę wybrałem rozwiązanie najprostsze chyba: z pomocą AnyDeska używam komputera w budce tak jakby to był mój domowy komputer. Z tego też powodu wszystkie programy dla mnie niezbędne uruchamiane są tam na miejscu. W tej chwili wiem, że to wszystko można by zrobić inaczej, ale tak jak jest jest OK i nie będę już tego zmieniał. Poza wyjątkowymi okazjami, kiedy internet lubi trochę spowolnić reakcję, wszystko działa niemal natychmiast, a zwłoka jest nie większa niż ułamek sekundy.

Odnośnik do komentarza
Udostępnij na innych stronach

Momecik bo coś mnie zaciekawiło.

Dane z płytki arduino widzisz na kompie poprzez serial port jak widze.

Na płytce arduino siedzi jakaś atmega zapewne (nie uzywam arduino bo programuje atmegi ale pewnie jest tak) wiec jak skompilujesz kod i wgrasz do flasha procka to juz sama atmega pracuje z tym czujnikiem i wydala na serial porcie dane. Kazdy komp to przez zwykły terminal obsłuży , nie musi mieć żadnych kompilatorów. Tak zrobilem u siebie i działało na gołej atmedze z płytką bm280 na i2c.

No chyba że coś Cię źle rozumiem.

  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, AdamK napisał:

Przecież żeby w obserwatorium odpalić monitor/kreślarkę, to najpierw muszę uruchomić tam program Arduino, tak czy nie...? Monitor sam z siebie nie działa przecież.

Może nie znam się na tych wynalazkach w rodzaju Arduino, ale jak wyobrażasz sobie program Arduino odpalony w domu, który monitoruje urządzenie (płytkę Arduino Uno), która jest zainstalowana w obserwatorium. Opisz to dokładnie... Może wiesz coś o czym ja sobie nie zdawałem sprawy...?

Program nie działa na Twoim komputerze tylko na Arduino - w sumie to jest taki "komputer" z własnym procesorem i RAM-em. Jeżeli wgrasz go na flasha, to on tam siedzi na stałe i jeżeli podłączysz zasilanie, to zostanie uruchomiony. Nie potrzebuje do tego komputera, działa i cały czas wysyła dane na serial niezależnie od tego czy Arduino jest połączone z komputerem. Komputer potrzebujesz tylko do odbierania danych. Gdybyś np. dodał do układu moduł BlueTooth, to mógłbyś to odbierać bezprzewodowo.

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, GrzegorzP napisał:

Program nie działa na Twoim komputerze tylko na Arduino - w sumie to jest taki "komputer" z własnym procesorem i RAM-em. Jeżeli wgrasz go na flasha, to on tam siedzi na stałe i jeżeli podłączysz zasilanie, to zostanie uruchomiony. Nie potrzebuje do tego komputera, działa i cały czas wysyła dane na serial niezależnie od tego czy Arduino jest połączone z komputerem. Komputer potrzebujesz tylko do odbierania danych. Gdybyś np. dodał do układu moduł BlueTooth, to mógłbyś to odbierać bezprzewodowo.

Ja wiem o tym, że Arduino z wgranym kodem działa samodzielnie. Jednak jeśli chcę widzieć dane jakie generuje ten kod to muszę odpalić jakiś monitor portu szergowego, który mi to pokaże. Używam do tego monitora szeregowego, który jest w kompilatorze Arduino.

To i tylko to próbuję powiedzieć. 

 

Odnośnik do komentarza
Udostępnij na innych stronach

32 minuty temu, AdamK napisał:

Ja wiem o tym, że Arduino z wgranym kodem działa samodzielnie. Jednak jeśli chcę widzieć dane jakie generuje ten kod to muszę odpalić jakiś monitor portu szergowego, który mi to pokaże. Używam do tego monitora szeregowego, który jest w kompilatorze Arduino.

To i tylko to próbuję powiedzieć. 

 

I wszystko byłoby jasne, tylko nie rozumiem dlaczego w takim razie chciałeś kompilować kod programu na komputerze w obserwatorium. Wydawało mi się, że to był początek problemów, ale być może czegoś nie zrozumiałem.

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.