Arduino IDE w EuroLinux 9 Desktop

Arduino IDE w EuroLinux 9 Desktop – monitoring serwerowni

Arduino jest platformą Open Source używaną do budowania projektów elektronicznych. Składa się z fizycznej płytki programowalnej/mikrokontrolera oraz z oprogramowania IDE, które służy do pisania i przesyłania kodu komputerowego do tej płytki. W tym artykule, korzystając z Arduino IDE uruchomionego na EuroLinux Desktop, utworzymy prosty program, który będzie monitorował naszą serwerownię.

Arduino jest platformą Open Source używaną do budowania projektów elektronicznych. Składa się zarówno z fizycznej płytki programowalnej/mikrokontrolera, jak i z oprogramowania IDE (Integrated Development Environment), które służy do pisania i przesyłania kodu komputerowego do tej płytki.

Platforma Arduino stała się popularna wśród osób rozpoczynających przygodę z elektroniką. W przeciwieństwie do większości poprzednich układów programowalnych Arduino nie wymaga osobnego sprzętu (zwanego programatorem), aby załadować nowy kod na płytkę – można po prostu użyć kabla USB. Dodatkowo Arduino IDE używa uproszczonej wersji języka C++, co ułatwia naukę programowania.

arduino

Sprzęt i oprogramowanie Arduino zostały zaprojektowane dla hobbystów, projektantów, artystów i wszystkich zainteresowanych tworzeniem interaktywnych obiektów i środowisk. Arduino może współpracować z przyciskami, diodami LED, silnikami, głośnikami, urządzeniami GPS, kamerami, internetem, a nawet smartfonem czy telewizorem, czyli z większością dostępnego sprzętu i peryferii.

Taka elastyczność w połączeniu z tym, że oprogramowanie Arduino jest darmowe, płytki sprzętowe są dosyć tanie, a zarówno oprogramowanie, jak i sprzęt są łatwe do nauczenia się, doprowadziła do powstania dużej społeczności użytkowników. Stworzyła ona kod dla ogromnej liczby otwartych projektów opartych na Arduino.

Dzisiaj, korzystając z Arduino IDE uruchomionego na EuroLinux Desktop, zajmiemy się utworzeniem prostego programu, który za pomocą czujnika dymu i gazów łatwopalnych MQ-2 oraz czujnika temperatury i wilgotności DHT11, będzie monitorował naszą serwerownię.

Jak zaprogramować płytkę Arduino?

Arduino IDE to oprogramowanie Open Source, które jest napisane w Javie i działa na różnych platformach: Windows, Mac i Linux. IDE umożliwia pisanie kodu w specjalnym środowisku z podświetlaniem składni i innymi funkcjami, które ułatwiają kodowanie, a następnie łatwe załadowanie kodu do urządzenia za pomocą prostego kliknięcia przycisku.

Program napisany za pomocą IDE dla Arduino jest nazywany „szkicem”. Typowy szkic Arduino w języku C/C++ składa się z dwóch funkcji, które są kompilowane i łączone z funkcją main() w cykliczny program wykonawczy:

  • setup() – funkcja uruchamiana raz na początku programu, która inicjalizuje ustawienia
  • loop() – funkcja wywoływana wielokrotnie, aż do wyłączenia płytki.

Posiadając te podstawowe informacje, możemy przejść do kolejnego kroku, którym jest instalacja środowiska programistycznego.

Instalacja Arduino IDE w EuroLinux 9 Desktop

Uwaga – poradnik był pisany dla Arduino IDE w wersji 1.8. Proces instalacji aktualnej wersji 2.0 mógł ulec zmianie.

Aby móc programować Arduino, w pierwszej kolejności należy pobrać skompresowane archiwum IDE ze strony https://www.arduino.cc/en/software, wybierając wersję dla systemu Linux 64-bit.

Następnie uruchamiamy terminal i rozpakowujemy archiwum IDE poleceniem:

tar -xf arduino-*.tar.xz

Teraz należy przenieść katalog z IDE do katalogu domowego:

mv arduino-*/ ~/

i przejść do tego katalogu:

cd ~/arduino-*/

Przed kolejnym krokiem upewnijmy się, że posiadamy zainstalowany pakiet java-11-openjdk. Jeżeli nie – to zainstalujmy go poleceniem:

sudo dnf install java-11-openjdk

Dopiero w tej chwili możliwa jest właściwa instalacja środowiska Arduino IDE, która odbywa się poprzez wykonanie polecenia:

sudo ./install.sh

Po zakończeniu procesu instalacji należy jeszcze usunąć katalog java, który znajduje się w katalogu bieżącym:

rm -rf java

Musimy także dodać naszego użytkownika do grupy dialout, dzięki czemu uzyskamy dostęp do portu, na którym działa nasze Arduino:

sudo usermod -aG dialout $USER

Po tej operacji wymagany jest restart komputera.

Teraz możemy uruchomić Arduino IDE w systemie EuroLinux Desktop po prostu wybierając z listy dostępnych programów aplikację Arduino IDE.

W zależności od preferencji możemy wybrać wersję dzienną lub nocną środowiska w systemie EuroLinux Desktop klikając ikonkę księżyca w prawym, dolnym rogu ekranu:

arduino

arduino

Montaż i aktywacja projektu

Jeżeli aplikacja IDE działa poprawnie, to możemy przejść do montażu płytki na podstawie poniższego schematu:

arduino

W projekcie korzystamy z najpopularniejszych rezystorów 220Ω oraz z klasycznej płytki prototypowej. Efekt końcowy powinien wyglądać podobnie jak na zdjęciu:

arduino

Możemy teraz przejść do oprogramowania płytki. W pierwszej kolejności musimy dodać bibliotekę do obsługi czujników temperatury DHT11, DHT21 i DHT22.

Dokonamy tego z menu Szkic → Dołącz bibliotekęzarządzaj bibliotekami → w oknie wyszukiwania wpisujemy dht i z listy poniżej wybieramy bibliotekę: DHT sensor library by Adafruit.

Instalujemy powyższą bibliotekę i wszystkie jej zależności.

Aktywujemy port komunikujący się z Arduino wybierając z menu NarzędziaPort/dev/ttyACM0

W Arduino IDE wklejamy gotowy poniższy szkic, kompilujemy go przyciskiem w lewym górnym rogu i jeżeli wszystko przebiegło poprawnie, to wysyłamy go do Arduino przyciskiem umieszczonym tuż obok poprzedniego, służącego do kompilacji.

/*
   DHT11 + MQ-2 + Piezzo / Arduino Sketch
   --------------------------------------
   REQUIRES the following Arduino libraries:
   - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
   - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
*/

#include "DHT.h"

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

#define DHTPIN 2     // Digital pin connected to the DHT sensor
#define SMOKE A5     // Analog pin connected to MQ-2 sensor
#define BUZZER 10    // Buzzer pin

#define STHRES 400    // Smoke threshold value
#define TTHRES 30     // Temperature threshold value

// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  pinMode(BUZZER, OUTPUT);
  pinMode(SMOKE, INPUT);
  Serial.println(F("SrvMon"));
  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);
  int smokeSensor = analogRead(SMOKE);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old'
  float h = dht.readHumidity();
  
  // Read temperature as Celsius
  float t = dht.readTemperature();

  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  Serial.print(F("Temperature: "));
  Serial.print(t);
  Serial.print(F(" °C    "));
  Serial.print(F("Smoke: "));
  Serial.print(smokeSensor);
  Serial.print(F("    "));
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.println(F(" %"));

  if (smokeSensor > STHRES or t > TTHRES) tone(BUZZER, 1000, 200);
}

Jeżeli procesy kompilacji i wgrywania programu na płytkę przebiegły pomyślnie, to wprost z naszego Arduino możemy teraz podejrzeć wartości trzech zmiennych: temperatury powietrza, zadymienia i wilgotności powietrza. Dokonamy tego w Arduino IDE z menu NarzędziaMonitor portu szeregowego. Komputer wyśle do Arduino wiadomość SrvMon i w wyniku powinniśmy otrzymać aktualizowane co dwie sekundy dane tych trzech powyższych wartości:

Temperature: 26.10 °C Smoke: 27 Humidity: 42.00 %
Temperature: 26.10 °C Smoke: 27 Humidity: 41.00 %
Temperature: 26.10 °C Smoke: 27 Humidity: 42.00 %
Temperature: 26.10 °C Smoke: 27 Humidity: 42.00 %
Temperature: 26.10 °C Smoke: 26 Humidity: 42.00 %
Temperature: 26.10 °C Smoke: 26 Humidity: 42.00 %

Jeżeli wartość zmiennej Smoke przekracza 400, to znaczy, że w pomieszczeniu obecny jest dym i włączy się przerywany sygnał dźwiękowy. Będzie on odtwarzany również w przypadku przekroczenia temperatury powyżej 30 stopni Celsjusza. Oczywiście są to domyślne wartości – można eksperymentować z tymi ustawieniami korzystając ze zmiennych STHRESH i TTHRES odpowiednio dla dymu i temperatury.

Kontrola procesu

Teraz pozostaje już tylko skryptowy, systematyczny odczyt tych danych przez serwer np. co 30 sekund. Wykorzystamy do tego zadania prosty skrypt bashowy. Powiadomienie o wykryciu dymu lub o zbyt wysokiej temperaturze, wysyłane będzie poprzez komunikator Slack:

#!/bin/bash

# Temperature threshold value
TTHRES=30
# Smoke threshold value
STHRES=400
# Time gap between Slack messages
SLACK_SLEEP=5
# Time gap between checks
BREAK=30

function Slack () {
`curl -s -X POST -H 'Content-type: application/json' --data "{'text':'$1'}" https://hooks.slack.com/services/T01GNQECZT7/B01J837URLH/uQuAjfoejsfJpIO`
}

stty 9600 -ixon icanon </dev/ttyACM0
while true; do
    MES=$(head -2 /dev/ttyACM0 | grep Temp)
    TMP=$(echo $MES | cut -f 2 -d' ')
    SMG=$(echo $MES | cut -f 5 -d' ')
    TMP=$(printf '%.0f' $TMP)
    [[ "$SMG" -gt "$STHRES" ]] && \
        Slack "Fire in the server room !!" && sleep $SLACK_SLEEP
    [[ "$TMP" -gt "$TTHRES" ]] && \
        Slack "High temperature - DevOps are mining Ethereum again !!"
    sleep $BREAK
done

Odpowiedź na pytania czy, jak i dlaczego podłączyć nasze Arduino bezpośrednio do internetu i ominąć komunikację poprzez serwer, pozostawiam już w gestii naszych czytelników.

Podsumowanie

Oprogramowanie Arduino IDE jest łatwe w użyciu dla początkujących, a jednocześnie wystarczająco elastyczne dla zaawansowanych użytkowników. Działa na komputerach Mac, Windows i Linux – w tym na komputerach z zainstalowanym systemem EuroLinux 9 Desktop. Oprócz łatwości programowania, którą umożliwia Arduino IDE, inną ważną cechą jest moc i możliwości mikrokontrolera AVR, na którym jest oparte. Dzięki szerokiemu wyborowi tanich modułów, czujników i siłowników, naprawdę nie ma wielu rzeczy, których nie da się stworzyć z Arduino – ograniczeniem jest tylko nasza wyobraźnia.

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.