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

Jak zacząć programowanie arduino w C?

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 ?
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ę.

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

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).

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.

0

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

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

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:

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:

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

A na Arduino frameworku

Serial.Begin(9600);
Serial.println('dupa');
String str = Serial.readString();
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ć.

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

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.

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

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

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.

0

@revcorey:

programować w ladderze? toż to męka

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1