Jak zacząć programowanie arduino w C?

Jak zacząć programowanie arduino w C?

Wątek przeniesiony 2023-04-06 20:45 z Hardware/Software przez flowCRANE.

ZK
  • Rejestracja:około 19 lat
  • Ostatnio:4 miesiące
0

Zaszła potrzeba napisania czegoś co obsługuje jakiś sprzęt elektroniczny i mam zestaw pytań o arduino i język C/C++ - bo chcę aby bliżej nieokreślony sprzęt elektroniczny komunikował się z moją bazą.

  1. Czy arduino można programować w języku C ?
  2. Czy ta książka będzie odpowiednia do nauki programowania arduino ?
  3. Czy jest jakaś różnica między arduino, a avr ? (Można się w tym nieźle pogubić)
  4. Jakie mikrokontrolery można programować w języku C ?

bla
edytowany 1x, ostatnio: Riddle
ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
6
  1. Dialekt arduino to pochodna C++ , więc też i C
  2. zalezy dla kogo
  3. AVR to linia procesorów Atmela. Najsłabsze z nich nie są zdolne udźwignąc Arduino, ale średnie-wyższe są dokładnie bazą pod popularne zestawy. Najnowsze / najwyższe implemenatcje aruino chodza na 32b, które już nie są (dosłownie) procesorami AVR
  4. Jakie nie można? Jakies baaardzo stare. W praktyce każdy AVR można (może kilka jest skrajnie ubogich - ale i tak ich nie kupisz jako kit).
    Można, to nie znaczy że każdemu się uda.

Spojrzałem na nick, mam wrażenie, że odpowiedzią zrobiłem ci krzywdę.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 1x, ostatnio: ZrobieDobrze
RE
nie zła droga -> C++ ->python->C++->c#->c++->C#->C++ a teraz C dla mikro.
RE
"bo chcę aby bliżej nieokreślony sprzęt elektroniczny komunikował się z moją bazą" to nieco mrozi krew w żyłach.
ZK
@revcorey: "bo chcę aby bliżej nieokreślony sprzęt elektroniczny komunikował się z moją bazą" to nieco mrozi krew w żyłach" :D zabawne, nic nie mrozi, RFID, czujnik temperatury spokojnie może komunikować się z bazą i zapisać w niej swoje dane
RE
nie rozumiesz ty na to nie masz szans xD z reszta o labview też pewnie nie słyszałeś.
ZK
@revcorey: słyszałem o labview ale z tego co pamiętam jest to narzędzie płatne i po drugie nie mam do niego dostępu
ZK
  • Rejestracja:około 19 lat
  • Ostatnio:4 miesiące
0
ZrobieDobrze napisał(a):
  1. Dialekt arduino to pochodna C++ , więc też i C

niby ok, nie znam się na tym bo jeszcze nie robiłem w tym ale spojrzałem na przykładowy kod i np tam nie ma pętli np while, for tylko jest jakieś loop - jak pisać na arduino w czystym C ?

  1. zalezy dla kogo

dla tego kto chce napisać obsługę sprzętu w języku C na arduino (NIE w czymś podobnym do C/C++) - aby nie bawić się w lutowanie i składanie z innych komponentów, bo interesuje mnie tylko napisanie programu

Spojrzałem na nick, mam wrażenie, że odpowiedzią zrobiłem ci krzywdę.

nie wiem skąd te wnioski ale chyba jesteś w błędzie


bla
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Postów:3502
4

Weź dokumentację i poczytaj. Jest w Arduino pętla while.
Przykład kodu https://docs.arduino.cc/built-in-examples/control-structures/WhileStatementConditional

Pętla loop początkowa to taki zamiennik while(true).

RE
"Weź dokumentację i poczytaj." - to znana persona z działu C++ on nic nie poczyta.
jurek1980
@revcorey: zdaję sobie sprawę. Taka metoda zdartej płyty. Kolejny temat, to kolejny raz odsyłam do kursów i dokumentacji. Kiedyś się przełamie.
SA
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 10 godzin
  • Postów:1435
2

Nie trzeba pisać w Arudino IDE czy w ogóle w dialekcie Arduino na Arduino - to tylko platforma. Można pisać w gołym C, kompilować avr-gcc i wrzucać przez avrdude na mikrokontroler, a Arduino nadal jest wygodne, bo jest na jednej płytce i ma interfejs USB.

ZK
dzięki, chyba tego było mi trzeba :) mam nadzieję, że książka którą podałem w linku opiera się na avr-gcc i avrdude - ale pewnie to tylko moje pobożne życzenie
ZK
@Saalin: najprawdopodobniej książka z linka opisuje narzędzia które podałeś - jeśli to prawda, to jeszcze raz dzięki
P2
  • Rejestracja:ponad 4 lata
  • Ostatnio:24 dni
  • Postów:74
0

Co w tym wypadku oznacza określenie "komunikacja z bazą" ? Czy chodzi o bazę danych ?

ZK
  • Rejestracja:około 19 lat
  • Ostatnio:4 miesiące
0
P2420 napisał(a):

Co w tym wypadku oznacza określenie "komunikacja z bazą" ? Czy chodzi o bazę danych ?

chodzi mi dokładnie o coś takiego jak na filmie, tylko zamiast PHP, zastąpić Qt


bla
edytowany 2x, ostatnio: zkubinski
RE
widzę że nie potrafisz czytać masz pomogę ci opis filmiku. We are just reading the serial data coming from NodeMCU ESP8266 and then publishing that to MySQL Database through python code. A gadasz o php. xD pewnie nadal myśłisz że to avr pisze do mysql...
ZK
@revcorey: to jak jesteś dobry w te klocki, to może podrzucisz dobrą dokumentację jak zaprogramować swój port COM lub USB ? Bo jeszcze niczego dobrego nie znalazłem
ZK
@revcorey: może i sobie nie poradzę, może i jestem za głupi ale przynajmniej spróbuję
Althorion
@zkubinski: to nie jest kwestia głupoty lub nie, to jest kwestia podejścia i słomianego zapału. Nie skończyłeś jednej rzeczy, bierzesz się za kolejną. Nie-nauczenie się piętnastu tematów zamiast nauczenia się chociaż jednego. Wybierz coś i to zrób, zamiast skakać z kwiatka na kwiatek. Nie dziel swojej uwagi na kilka rzeczy naraz. Nie ma punktów za partycypację, liczy się tylko to, co doprowadzisz do końca. I może faktycznie u Ciebie będzie to programowanie mikrokontrolerów, ale raczej wątpię — przez 17 lat na forum jeszcze nie udało Ci się zaprzeć do końca nawet raz.
GO
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad rok
  • Postów:141
3

Arduino to taki framework, normalnie jak masz AVR mikrokontroler, to musisz np. dla komunikacji UART, ustawić baut rate ustawiając w specjalnym rejestrze, różne ustawienia, które wyczytujesz z dokumentacji mikrokontrolera.

A arduino robisz tylko Serial.begin(baut_rate) i gotowe masz teraz tylko Serial.read() i Serial.write(), a także Serial.isAvailable() do sprawdzania czy coś jest, można doczytać na stronie arduino dokumentację do tych metod, widać że tutaj już nie musisz siedzieć z nosem w datasheets.

ESP8266 jest trochę lepsze od arduino, można po wifi lub UART komunikację robić.
Z poziomu PC, w pythonie masz PySerial, z poziomu shella robisz konfigurację baut rate, bity stopu itp. i potem zwyczajnie jak do zwykłego pliku czytasz i piszesz do /dev/ttyUSB1

Trzeci sposób to Iterujesz po PCI -> potem po USB bus, -> potem po urządzeniach na danym busie USB, szukasz twojego urządzania.
Zwykle są 3 podstawowe komunikacje usb_control_msg, usb_interrupt, usb_isochronous, usb_bulk.

Adapter typu USB-UART działa w ten sposób, że jest urządzenie typu np. mikrokontroler AVR, wewnątrz ma bufor/kolejkę, za pomocą usb_control_msg ustawiasz tam wewnątrz parametry komunikacji tego kontrolera, za pomocą usb_bulka wypełniasz lub odbierasz dane z buforów in/out, a wewnątrz mikrokontroler wybiera te bajty z tej kolejki i wysyła je po UART do innego urządzenia, w tym do głównego mikrokontrolera.

Tutaj prosty przykład jak komunikację w shellu spreparować, bautrate 9600:

Kopiuj
stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts # ustawienia

exec 5>/dev/ttyACM0 # otwarcie urządzenia

echo -ne "send data\n" > /dev/ttyACM0 # pisanie do urządzenia

cat /dev/ttyACM0 # odbiór od urządzenia danych

exec 5>&-  # zamknięcie komunikacji

Przykład w Pythonie:

Kopiuj
with serial.Serial('/dev/ttyACM0', 9600, timeout=1) as con:
con.write(bytearray('dupa', 'ascii')
print(con.read(255).decode())

A na Arduino frameworku

Kopiuj
Serial.Begin(9600);
Serial.println('dupa');
String str = Serial.readString();
kzkzg
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Postów:926
1

trochę siedziałem w Arduino przez ostatnie tygodnie to może coś podpowiem.
Kup sobie esp8266 nocemcu v3
Ma to wbudowane WiFi, także możesz sobie postawić jakimś prosty serwerek i strzelać z kompa czy tam komórki do niego.
Jak ogarniesz te sprawy, to możesz sobie zakupić jakieś czujniki , sterowniki silników krokowych itd i działać dalej. Mocno polecam zakup oscyloskopu, nawet jako taka przystawka do kompa, za lekko ponad trzy stówy można taki kupić.

To że nie widzisz pętli for, to masz pewnie jakiś przykład w Lua. Normalny kod w C też możesz na to pisać.


Keep calm and blame frontend.
Tell your cat I said pspsps.
edytowany 1x, ostatnio: kzkzg
P2
  • Rejestracja:ponad 4 lata
  • Ostatnio:24 dni
  • Postów:74
1

Na najbardziej popularne wersje układów ESP jak również na inne procesory jest dość wydajny Micropython. Napisane aplikacji sieciowej w wysokopoziomowym języku jest znacznie szybsze niż C. Nie trzeba nic kompilować. https://docs.micropython.org/en/latest/library/index.html

edytowany 2x, ostatnio: P2420
ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
1
P2420 napisał(a):

Na najbardziej popularne wersje układów ESP jak również na inne procesory jest dość wydajny Micropython. Napisane aplikacji sieciowej w wysokopoziomowym języku jest znacznie szybsze niż C. Nie trzeba nic kompilować. https://docs.micropython.org/en/latest/library/index.html

@kzkzg:

Nie / tak / zalezy

Arduino 32b (ESP i inne) to taka świnka morska.
Mocą CPU już trochę blisko Raspberry, a jeszcze bare metal, niby moc do internetu / wifi ok, ale zaczyna nie mieć nic wspólnego z małymi kontrolerami (praca miesiace na baterii guzikowej dzięki usypianiu i przerwaniom)

Czego nauczy? Tego co już wysokopiomowa biblioteka udostępnia i niemal niczego o sprzęcie. Sama arduiniowa abstrakcja "portu analogowego" jest totalnie chora, a cyfrowego niewiele lepsza
Nauczy Lua / Pythona ?
To o wiele lepiej na pececie.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
GO
Uczenie się na arduino też jest dobre, można to sobie wyobrazić jako odesparowanie elementów, których będziemy się uczyć, jeśli chcemy skupić się na elektronice i mniej na programowaniu to micropython, arduino jest dobre, bo bardziej skupimy się na fizyce jak działają dane elementy. Między assemblerem/C/Arduino jest różna różnica, np. włączenie danego portu w stan podciągnięty do napięcia, to na assemblerze ustawiamy bit w rejestrze, który znajduje się w ramie na początku addr |= 1<<bit; w C robimy tak samo, ale zamiast adresu macro, a arduino mamy funkcję.
RE
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 6 godzin
1

arm M0 jest bogaty w akcesoria, w5500 z nimi działa no ale z AVR też czy też enc28j60. Problemem tu nie jest sprzęt a po prostu op.
Edit: mam to na półce https://helion.pl/ksiazki/jezyk-c-dla-mikrokontrolerow-avr-od-podstaw-do-zaawansowanych-aplikacji-tomasz-francuz,jcmikr.htm#format/e
Edit 2
Tu nowsze wydanie https://helion.pl/ksiazki/jezyk-c-dla-mikrokontrolerow-avr-od-podstaw-do-zaawansowanych-aplikacji-wydanie-ii-tomasz-francuz,jcmika.htm#format/d


We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile
edytowany 3x, ostatnio: revcorey
ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
2
zkubinski napisał(a):
ZrobieDobrze napisał(a):
  1. Dialekt arduino to pochodna C++ , więc też i C

niby ok, nie znam się na tym bo jeszcze nie robiłem w tym ale spojrzałem na przykładowy kod i np tam nie ma pętli np while, for tylko jest jakieś loop

Jak spojrzysz w kod demo Qt, też tam nie widać pętli - a jest.

revcorey napisał(a):

Problemem tu nie jest sprzęt a po prostu op.

+1

Sorry @zkubinski zrób sobie na pożytek (a nam merytoryczną przyjemność - bo na razie mamy niechrześcijańską Schadenfreude) i naucz się jakiegoś wąskiego obszaru, ale porządnie.
Z twoja zdolnoscią do zdobywania wiedzy z dokumentacji czarno widzę mikrokontroler, naprawdę
Zostanie ci tylko kopiowanie przypadkowych kodów z Elektrody, gdzie większość "programistów arduino" jest na twoim poziomie, z czego nikt korzyści nie odniesie


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 2x, ostatnio: ZrobieDobrze
RE
Dodajmy że bez kubek jakie zapewnia Arduino to już może amen dla niego. Czytać jakimś interesem, zdekodować te bity itd. bo to może się okazać że nie do przejścia dla niego.
RE
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 6 godzin
0

Przemyślałem sprawe. Kup sobie sterownik PLC, w fbd czy ladderze se zaprogramuj. Podłącz do scady i tyle niech ci do bazy zapisuje.


We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 9 godzin
  • Postów:5138
0

@revcorey:

programować w ladderze? toż to męka

RE
Zależy do czego. Np. takie systemy jak szr idealnie się nadają do drabinki. To bliskie klasycznym Stycznikom
Marcin Marcin
  • Rejestracja:około 6 lat
  • Ostatnio:2 miesiące
  • Postów:610
0
  1. Arduino to zestaw do prototypowania a nie programowania
  2. Kup sobie dowolnego ARM np. Microchipa/Texasa/STM ale jako zestaw developerski
  3. sprawdź debuggery sprzętowe typu segger / JTAG oraz inne narzędzia jak analizatory logiczne
  4. zrób prosty projekt od początku do końca np. serwer po wifi/ethernet ale napisany samemu
  5. sprawdź meetupy embedded i grupy na facebooku (programiści embedded, STM32)

Naucz się instrukcji assemblera i analizy kodu wynikowego w godblocie


Fan moderatora somekind
WeiXiao
Naucz się instrukcji assemblera i analizy kodu wynikowego w godblocie do czego to się przydaje?
Marcin Marcin
pisania bootloaderów, analizy kodu wynikowego kompilatora
WeiXiao
i to się faktycznie w pracy przy programowaniu urządzonek przydaje? :D
Marcin Marcin
jak chcesz napisać bootowanie z sprawdzeniem sprzętu to tak, poza tym jak analizujesz kod na godbolcie to dobrze rozumieć co robi kompilator
RE
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 6 godzin
0

nie wiem jakie ma możliwości ale openplc działa na avr i da radę coś napisać w LD
https://openplcproject.com/
czyli jak się nie ma hajsu na plc.


We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile
edytowany 1x, ostatnio: revcorey

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.