Skocz do zawartości
Antosik

Nie potrafię zaleźć modułu radiowego z biblioteką w C

Pomocna odpowiedź

Cześć. Potrzebuję waszej pomocy w poszukiwaniach. Szukam modułu radiowego dalekiego zasięgu do komunikacji między dwoma mikro kontrolerami Atmega328-PU. Problem polega na tym, że do wszystkich modułów biblioteki są pisane w C++ dla Arduino, a ja używam samych AVR-ów i potrzebuję biblioteki w języku C. Dużych paczek danych nie będę wysyłać więc na przepustowości mi nie zależy, za to zasięg musi być jak największy (1000m+), no i żeby moduły były proste w obsłudze. Całość ma służyć do zdalnego sterowania pojazdem.

Udostępnij ten post


Link to post
Share on other sites

@Antosik ponad 1000 m to już bardzo dużo. Większość modułów sobie nie poradzi (teoretyczny zasięg jest daleki od praktycznego). Jaki masz budżet na te moduły?

Udostępnij ten post


Link to post
Share on other sites

Jakiś czas temu komuś doradziłem na tym forum w podobnej sprawie.Moduł HC12.Producent twierdzi,że 1,8km.Dołączyłem plik konfiguracyjny hc12 config.exe .Idź do tematu : Moduł radiowy dla Arduino - jaki wybrać? Poczytaj  . Z moich doświadczeń  wynika,że działa wybornie.Opis HC12 znajdziesz w necie.O antenach też znajdziesz jakiś pliczek.

Udostępnij ten post


Link to post
Share on other sites

Oczywiście zdaję sobie sprawę, że rzeczywisty zasięg jest mniejszy jednak i tak jest to 10X więcej niż najtańsze układy. Budżet do 100 zł za sztukę o ile nie będę musiał użyć konwertera 5V na 3.3V, ponieważ uC zasilam napięciem 5V co może uszkodzić niektóre moduły. Najbardziej podobają mi się układy: "HC-12 SI4463", mają dużo dobrych opinii, są niedrogie, zasięg się zgadza i zasilanie są napięciem 5V. Jednak mają biblioteki tylko w C++ dla Arduino. Czy mogę do C dołączyć biblioteki C++? I czy AVR-GCC to skompiluje?

Udostępnij ten post


Link to post
Share on other sites

Oto przykładowy programik do obsługi  modułu HC12.

#include <SoftwareSerial.h>
SoftwareSerial HC12(10, 11); //SRX-D10, STX-D11 Pins of NANO
void setup()
{
  Serial.begin(9600);             // Hardware Serial port to computer
  HC12.begin(9600);               // Software Serial port to HC12
}

void loop()
{
  while (HC12.available())          // If HC-12 has data
  {        
    Serial.write(HC12.read());      // Send the data to Serial Monitor
  }
}

void serialEvent()                  //only for Hard Serail Port
{
  while (Serial.available())        //data from Serial Monitor-1
  {      // If Serial monitor has data
    HC12.write(Serial.read());      // Send that data to HC-12 via Software UART Port
  }
}

Musisz skonfigurować nowy  UART oparty na  bibliotece softwareSerial.h. Ten który jest na wyposażeniu to hardware i nie zadziała.Zamiast użytych portów D10,D11 możesz użyć  innych portów.Nie bój się Arduino nie gryzie.HC12 w wersji 5V kupisz w abc-rc o ile mają na stanie.Trochę poćwiczysz i wszystko będzie jasne.Nie zapomnij ,że połączenie UART arduino HC12 to musi wyglądać tak Rx arduino na Tx  HC12, Tx arduino na Rx Hc12.Vcc-Vcc Gnd-Gnd.Gdyby jakiejś biblioteki brakowało należy ją zinstalwać.W razie kłopotów rozwiązanie znajdziesz w kursie arduino jak to się robi.

Udostępnij ten post


Link to post
Share on other sites

@szymonw Na Linuxie nie uruchomię "config.exe", a kod który napisałeś jest dla Arduino. Dlaczego miałbym się bać arduino skoro nie boję się AVR-ów? Myślę, że powinieneś sprawdzić czym to się różni. Nie używam Arduino ze względu na rozmiar i cenę. Arduino ma za dużo elektroniki, która nie jest mi potrzebna w projekcie. Jak skończę prototyp, to mogę sobie kupić za 4 zł Atmegę w obudowie SMD, zaprogramować i przylutować do PCB.

Udostępnij ten post


Link to post
Share on other sites
14 godzin temu, Antosik napisał:

kod który napisałeś jest dla Arduino

W kwestii formalnej: kod używa bibliotek Arduino i jest przeznaczony do skompilowania przez Arduino IDE - co wcale nie oznacza że nie można go uruchomić na gołej atmedze czy nawet ESP.

Tak z ciekawości: co Ci stoi na przeszkodzie aby programować ATmegę w C++? A nawet jeśli C++ gryzie, dziabie i bodzie - to przepisanie biblioteki na C nie powinno być jakimś strasznym problemem.

14 godzin temu, Antosik napisał:

Nie używam Arduino ze względu na rozmiar i cenę.

Pro Mini też jest duży i drogi (ok. 10 PLN)?

14 godzin temu, Antosik napisał:

Na Linuxie nie uruchomię "config.exe",

Pytam bo nie wiem: pod Wine też?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Cóż, OS Windows daje zdecydowanie większe możliwości niż Linux bo jest zdecydowanie więcej wartościowego oprogramowania,które jest dostępne.Kiedyś przez chwilę miałem Linuxa  ale wywaliłem od kiedy pojawił się windows xp.Dzisaj mam windows 10.Zaletą jest między innymi to,że można zainstalować darmowe Visual Studio.Arduino w swej wersji początkowej obsługiwało tylko AVR-y poprzez port UART do którego doczepiony jest konwerter USB na UART.Platforma  Arduino podczas kompilacji wytwarza wszystkie pliki wsadowe,które są zapisywane na dysku.Trzeba tylko wiedzieć gdzie.Pierwsze co trzeba to wejść do preferencji i zaznaczyć w linijce "pokaż szczegółowe informacje podczas  kompilacji.Po skompilowaniu programu  ścieżka,którą można odnaleźć  u dołu ekranu(te komunikaty na czarnym tle) jest następująca dysk C ->użytkownicy->nazwa użytkownika->AppData->Local->Temp->arduino_build_xxxxxx->nazwa projektu.ino.hex.Tak wygląda to dla Windowsa.Zapewne podobnie wygląda to dla Linuxa.Mając plik wsadowy możesz pokusić się o zaprogramowanie kości używając programatora.O wiele wygodniejsze jest użycie płytki arduino np. nano lub pro mini.Programator jest już w kości a cena to jakieś 12zł no chyba,że kolega planuje jakąś większą produkcję.Nie spotkałem ATmegi 328 w cenie 4zł brutto.To co jest na rynku to jakieś 4,24 w nettcie przy 100 i więcej szt.Arduino IDE to przyzwoite oprogramowanie bo jeśli jest reprezentowana liczba "e "   to znaczy,że można zapisać dowolną funkcję.Trzeba się tylko zaznajomić z tym co oferuje Arduino.Ponadto Arduino oferuje inne płytki,które nie są oparte na ATmedze 328.Arduino to naprawdę niezły kombajn.I na koniec jeszcze jedno cena licencji na windows 10 to ok.180zł.Wydaje się ,że nie przewraca budżetu.

Edytowano przez szymonw
  • Nie zgadzam się! 3

Udostępnij ten post


Link to post
Share on other sites
9 minut temu, szymonw napisał:

OS Windows daje zdecydowanie większe możliwości niż Linux bo jest zdecydowanie więcej wartościowego oprogramowania,które jest dostępne.

Daruj sobie tego typu teksty bo jeszcze ktoś w to uwierzy.

 

12 minut temu, szymonw napisał:

Kiedyś przez chwilę miałem Linuxa  ale wywaliłem od kiedy pojawił się windows xp

Czyli jakieś dwadzieścia lat temu, tak?

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
12 godzin temu, ethanak napisał:

Pro Mini też jest duży i drogi (ok. 10 PLN)?

Oczywiście, że jest za duży, cały projekt musi być mniej/więcej wielkości arduino nano, a przecież mam jeszcze swoją elektronikę. Mam nadzieję, że ten temat już wyczerpałem.

12 godzin temu, ethanak napisał:

Tak z ciekawości: co Ci stoi na przeszkodzie aby programować ATmegę w C++? A nawet jeśli C++ gryzie, dziabie i bodzie - to przepisanie biblioteki na C nie powinno być jakimś strasznym problemem?

Do wczoraj nie wiedziałem, że mogę programować w C++ i użyć bibliotek Arduino. To wydaje mi się najlepszym pomysłem, jednak pierwsze próby kompilacji skończyło się błędami. Myślę, że to albo błąd w bibliotece, albo błąd w Makefile.

@ethanak czy mógłbyś mi z tym pomóc?

To jest to co wywala konsola przy próbie kompilacji:

ntosik@kali:~/Dokumenty/Projekty/asd$ make
avr-g++ -g -Wall -mcall-prologues -Os -DF_CPU=8000000 -mmcu=atmega328p  -Iinclude/  -c main.cpp -o main.o
In file included from main.cpp:7:0:
include/HC12.h:22:21: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
     const int len = 60;
                     ^
main.cpp: In function ‘int main()’:
main.cpp:22:23: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
     hc12.send("Hello!");            // Send message to remote HC-12. Newline is added automatically.
                       ^
avr-g++ -g -Wall -mcall-prologues -Os -DF_CPU=8000000 -mmcu=atmega328p  -Iinclude/ -o main.elf main.o   include//HC12.o
main.o: In function `_GLOBAL__sub_D_HC12Serial':
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0xa): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0xc): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0xe): undefined reference to `HardwareSerial::begin(unsigned long, unsigned char)'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x16): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x18): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x1a): undefined reference to `Print::println(char const*)'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x52): undefined reference to `delay'
main.o: In function `_GLOBAL__sub_I_HC12Serial':
/home/antosik/Dokumenty/Projekty/asd/main.cpp:26: undefined reference to `SoftwareSerial::SoftwareSerial(unsigned char, unsigned char, bool)'
main.o: In function `_GLOBAL__sub_D_HC12Serial':
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.exit+0x4): undefined reference to `SoftwareSerial::~SoftwareSerial()'
/tmp/cceg1uFQ.ltrans0.ltrans.o: In function `HC12::send(char*)':
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:34: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:35: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:36: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:37: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:38: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:38: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:38: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:39: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:40: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:41: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:42: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:45: undefined reference to `Print::println(char const*)'
/tmp/cceg1uFQ.ltrans0.ltrans.o: In function `HC12::begin()':
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `pinMode'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `SoftwareSerial::begin(long)'
/tmp/cceg1uFQ.ltrans0.ltrans.o: In function `HC12::loop()':
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `HardwareSerial::available()'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `HardwareSerial::read()'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::println(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:100: main.elf] Błąd 1
12 godzin temu, szymonw napisał:

Cóż, OS Windows daje zdecydowanie większe możliwości niż Linux bo jest zdecydowanie więcej wartościowego oprogramowania,które jest dostępne.(...) Zaletą jest między innymi to,że można zainstalować darmowe Visual Studio.

Visual Studio Code jest na niego również dostępny i działa świetnie. Linux sam w sobie jest bardziej wartościowy od Windowsa ale to nie jest tematem tego wątku.

Edytowano przez Antosik

Udostępnij ten post


Link to post
Share on other sites
9 minut temu, Antosik napisał:

Myślę, że to albo błąd w bibliotece, albo błąd w Makefile.

A masz zainstalowane Arduino IDE? Bez tego nie skorzystasz z bibliotek.

Użyj na razie do kompilacji Arduino IDE, doinstaluj tylko MiniCore.

 

Udostępnij ten post


Link to post
Share on other sites

Mam zainstalowane Arduino IDE ale biblioteki przeniosłem sobie z niego do systemowego lib/include/avr (albo jakoś tak, nie pamiętam teraz)(dzięki temu mogę je w wygodny sposób includować) i wygląda na to, że biblioteki Arduino działają poprawnie.

To jest link do bibliotek HC12, które używam. Swój kod oraz zawartość Makefile będę mógł dopiero wstawić po pracy tj. wieczorem.

 

Udostępnij ten post


Link to post
Share on other sites
6 minut temu, Antosik napisał:

biblioteki przeniosłem sobie z niego do systemowego lib/include/avr

I pliki *.cpp bibliotek mają się automagicznie skompilować? A skąd Twój make ma wiedzieć które?

Builder Arduino analizuje pliki źródłowe i kompiluje/linkuje właściwe pliki bibliotek. Dlatego piszę, że na razie kompiluj to przy pomocy IDE, choćby po to żeby zobaczyć, co on tam jeszcze mądrego wyprawia oprócz kompilacji Twoich źródeł.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Oczywiście, że się skomplikują. Zawsze się komplikowało wszystko. Przeniesienie ich do tego folderu pozwoliło mi tylko wygodnie je dodać za pomocą nawiasów trójkątnych.

Edytowano przez Antosik

Udostępnij ten post


Link to post
Share on other sites

Kompilują się w tej sytuacji pliki nagłówkowe, a co z plikami źródłowymi bibliotek? (*.cpp a nie tylko *.h)

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...