Arduino: запуск Arduino IDE на Linux, та перший “Hello, World!”

Автор |  03/02/2024
 

Продовжуємо бавитись з Ардуінкою 🙂

В попередньому пості трохи поговорили про Starter Kit – тепер хочеться вже ж щось зробити.

Тож встановимо IDE на Arch Linux, і спробуємо виконати перший код.

Запуск Arduino IDE на Linux

Документація для Arch Linux є тут>>>.

Встановлюємо IDE:

$ yay -S arduino-ide-bin

Перший запуск:

$ arduino-ide

Додамо CLI:

$ sudo pacman -S arduino-cli

Приклади в моїй офіційній документації є тут>>>, але там прям біда з форматуванням коду, тож я взяв інший приклад ось тут – Turn an LED on and off every second.

Arduino IDE, Linux та “No ports discovered”

Тепер нам в IDE треба вибрати board, тобто плату Arduino, з якою будемо працювати, але – “No ports discovered

Ну, Linux жеж 🙂

“Нєльзя просто так взять, і…” (с)

У CLI аналогічно:

$ arduino-cli board list
No boards found.

Окей, а якщо..

 

Але ні – після ребуту системи теж нічого не змінилося.

Судячи з документації, має з’явитись новий девайс – /dev/ttyACM0 або /dev/ttyUSBx – проте в мене нічого. Та й lsusb не виводить ніяких нових девайсів.

Почав гуглити, знайшов ось цей тред, і подумав – може і в мене проблема з USB-кабелем? А як перевірити? Бо іншого кабелю під рукою нема.

Проте є ігровий ПК з Віндою – давайте спробуємо там.

Встановлюємо IDE на Вінду, і – о чудо!

Але ж працювати під Віндою не хочеться, тож пішов знову пробувати з Linux, переключив Arduino назад до ноута з Arch, і – о, знову чудо!

Feb 03 16:14:41 setevoy-wrk-laptop kernel: usb 4-2: new full-speed USB device number 5 using xhci_hcd
Feb 03 16:14:41 setevoy-wrk-laptop kernel: usb 4-2: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
Feb 03 16:14:41 setevoy-wrk-laptop kernel: usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Feb 03 16:14:41 setevoy-wrk-laptop kernel: usb 4-2: Product: CP2102 USB to UART Bridge Controller
Feb 03 16:14:41 setevoy-wrk-laptop kernel: usb 4-2: Manufacturer: Silicon Labs
Feb 03 16:14:41 setevoy-wrk-laptop kernel: usb 4-2: SerialNumber: 0001
Feb 03 16:14:41 setevoy-wrk-laptop kernel: cp210x 4-2:1.0: cp210x converter detected
Feb 03 16:14:41 setevoy-wrk-laptop kernel: usb 4-2: cp210x converter now attached to ttyUSB0
Feb 03 16:14:41 setevoy-wrk-laptop mtp-probe[48870]: checking bus 4, device 5: "/sys/devices/pci0000:00/0000:00:08.1/0000:06:00.4/usb4/4-2"
Feb 03 16:14:41 setevoy-wrk-laptop mtp-probe[48870]: bus: 4, device: 5 was not an MTP device
Feb 03 16:14:42 setevoy-wrk-laptop mtp-probe[48931]: checking bus 4, device 5: "/sys/devices/pci0000:00/0000:00:08.1/0000:06:00.4/usb4/4-2"
Feb 03 16:14:42 setevoy-wrk-laptop mtp-probe[48931]: bus: 4, device: 5 was not an MTP device

І тепер є новий девайс в lsusb:

$ lsusb
...
Bus 004 Device 005: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
...

І tty:

$ ll /dev/ttyUSB0 
crw-rw---- 1 root uucp 188, 0 Feb  3 16:14 /dev/ttyUSB0

І тепер є порт в IDE під Linux:

 

Не знаю, чому так вийшло. Можливо, Ардуінка якось ініциалізувалася, коли нормально підключилась на Windows.

Але це ще не все 🙂

“/dev/ttyUSB0”: Permission denied

Потрібно додатково дозволити доступ до /dev/ttyUSB0 – тут трохи забігаю наперед, коли вже пробував заливати код:

Додаємо файл /etc/udev/rules.d/01-ttyusb.rules:

SUBSYSTEMS=="usb-serial", TAG+="uaccess"

Робимо релоад udev:

$ sudo udevadm control --reload

Перепідключаємо ардуінку, і клікаємо Upload:

І тепер все завантажилось:

Arduino “Hello, World!”

Окей, наче все готово?

Спробуємо зробити з прикладу Turn an LED on and off every second.

IDE та код

Тут просто копіюємо код з тієї сторінки:

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}

Підключаємо Arduino, клікаємо Upload:

В коді все наче досить просто:

  • виконуємо ініціалізацію LED_BUILTIN (13 pin на платі)
  • запускаємо цикл, в якому
    • подаємо живлення на LED_BUILTIN
    • чекаємо 1000 мілісекунд
    • відключаємо живлення

Тепер зберемо сам “девайс”, який буде нам блимкати лампочкою.

LED та резистор

Нам потрібен LED і резистор на 220 Ом.

Якщо з LED все зрозуміло, то з резистором я трохи покопався.

В наборі є кілька резисторів і таблиця відповідності кольорів – але я ну ніяк не міг розібрати які саме кольори на них (але нормально побачив, коли зробив цю фотку для цього посту 🙂 ):

Тож просто взяв мультиметр, та поміряв ним:

Коли ж вже це все зробив, то стала зрозуміла і ця схема:

Тож резистор на фотці має:

  • червоний
  • червоний
  • чорний
  • чорний
  • коричневий

Тобто відповідно до схеми це буде “2 2 0 х1 1%” – 220 Ом, начебто вірно?

Тепер спробуємо це все підключити.

Breadboard для Arduino

Дістаємо breadboard (“макетна плата”).

Під капотом вона має такі з’єднання:

І шини для підключення живлення та компонентів:

Отже, нам потрібно таке підключення:

Самому резистору сторона підключення не має значення – одним кінцем до шини, де у нас червоний провід, іншим кінцем туди, де буде лампа.

Сам LED довгою ніжкою підключаємо на сторону живлення (“+”), до резистора, короткою – до “землі”:

Далі – підключаємо на самій платі Arduino: чорний провід до GRD (Ground), червоний – до 13 pin – він у нас відповідає за роботу з LED (але з портами детальніше будемо розбиратись вже далі, див. Digital Pins):

Підключаємо Arduino до ноута (або підключаємо блок живлення), і…

Wow! It works! 🙂

Окей.

Тепер, як все працює – можна починати розбиратись з рештою, і пробувати щось вже більш складне.