Lietuvių

Tyrinėkite galingą „Arduino“ ir „Raspberry Pi“ derinį daiktų interneto projektams. Sužinokite apie integravimą, programavimą ir pasaulinius pritaikymo pavyzdžius.

Techninės įrangos harmonija: „Arduino“ ir „Raspberry Pi“ integravimas pasauliniams daiktų interneto sprendimams

Daiktų internetas (angl. Internet of Things, IoT) keičia pramonės šakas ir kasdienį gyvenimą pasauliniu mastu. Nuo išmaniųjų namų iki pramoninės automatikos – prijungti įrenginiai iš esmės keičia mūsų sąveiką su pasauliu. Daugelio daiktų interneto sprendimų pagrindą sudaro dvi galingos ir universalios platformos: „Arduino“ ir „Raspberry Pi“. Nors abi yra vienos plokštės kompiuteriai, jos turi skirtingų privalumų, kurie, sujungus, sukuria sinerginę ekosistemą, idealiai tinkančią įvairioms programoms.

Pagrindinių privalumų supratimas: „Arduino“ prieš „Raspberry Pi“

Prieš pradedant integraciją, labai svarbu suprasti, ką kiekviena platforma gali pasiūlyti:

„Arduino“: mikrovaldiklių meistras

„Raspberry Pi“: mini kompiuterio galiūnas

Kodėl verta integruoti „Arduino“ ir „Raspberry Pi“?

Tikroji magija įvyksta, kai sujungiamos abiejų platformų stipriosios pusės. Štai kodėl „Arduino“ ir „Raspberry Pi“ integravimas gali pakeisti žaidimo taisykles:

Integravimo metodai: dviejų pasaulių sujungimas

Yra keletas būdų sujungti „Arduino“ ir „Raspberry Pi“. Dažniausi metodai apima:

1. Nuoseklusis ryšys (UART)

Nuoseklusis ryšys yra paprastas ir patikimas duomenų mainų metodas. „Arduino“ ir „Raspberry Pi“ gali bendrauti per atitinkamas UART (angl. Universal Asynchronous Receiver/Transmitter) sąsajas.

Techninės įrangos sąranka:

Programinės įrangos diegimas:

„Arduino“ kodas (pavyzdys):

void setup() {
 Serial.begin(9600);
}

void loop() {
 int sensorValue = analogRead(A0);
 Serial.println(sensorValue);
 delay(1000);
}

„Raspberry Pi“ kodas („Python“):

import serial

ser = serial.Serial('/dev/ttyACM0', 9600)

while True:
 data = ser.readline().decode('utf-8').strip()
 print(f"Gauta: {data}")

Pastabos:

2. I2C ryšys

I2C (angl. Inter-Integrated Circuit) yra dviejų laidų nuosekliojo ryšio protokolas, leidžiantis keliems įrenginiams bendrauti toje pačioje magistralėje. Jis dažniausiai naudojamas jutikliams ir išoriniams įrenginiams prijungti.

Techninės įrangos sąranka:

Programinės įrangos diegimas:

„Arduino“ kodas (pavyzdys):

#include <Wire.h>

#define SLAVE_ADDRESS 0x04

void setup() {
 Wire.begin(SLAVE_ADDRESS);
 Wire.onRequest(requestEvent);
 Serial.begin(9600);
}

void loop() {
 delay(100);
}

void requestEvent() {
 Wire.write("sveiki ");
}

„Raspberry Pi“ kodas („Python“):

import smbus
import time

# Gauti I2C magistralę
bus = smbus.SMBus(1)

# Arduino pavaldžiojo įrenginio adresas
SLAVE_ADDRESS = 0x04

while True:
 data = bus.read_i2c_block_data(SLAVE_ADDRESS, 0, 32)
 print("Gauta: " + ''.join(chr(i) for i in data))
 time.sleep(1)

Pastabos:

3. SPI ryšys

SPI (angl. Serial Peripheral Interface) yra sinchroninis nuosekliojo ryšio protokolas, siūlantis didesnį duomenų perdavimo greitį, palyginti su I2C. Jis tinka programoms, kurioms reikalingas greitesnis ryšys.

Techninės įrangos sąranka:

Programinės įrangos diegimas:

„Arduino“ kodas (pavyzdys):

#include <SPI.h>

#define SLAVE_SELECT 10

void setup() {
 Serial.begin(9600);
 pinMode(SLAVE_SELECT, OUTPUT);
 SPI.begin();
 SPI.setClockDivider(SPI_CLOCK_DIV8); // Pagal poreikį koreguokite laikrodžio greitį
}

void loop() {
 digitalWrite(SLAVE_SELECT, LOW); // Pasirinkti pavaldųjį įrenginį
 byte data = SPI.transfer(0x42); // Siųsti duomenis (šiame pavyzdyje 0x42)
 digitalWrite(SLAVE_SELECT, HIGH); // Atšaukti pavaldžiojo įrenginio pasirinkimą
 Serial.print("Gauta: ");
 Serial.println(data, HEX);
 delay(1000);
}

„Raspberry Pi“ kodas („Python“):

import spidev
import time

# Apibrėžti SPI magistralę ir įrenginį
spidev = spidev.SpiDev()
spidev.open(0, 0) # Magistralė 0, Įrenginys 0
spidev.max_speed_hz = 1000000 # Pagal poreikį koreguokite greitį

# Apibrėžti Slave Select kontaktą
SLAVE_SELECT = 17 # Pavyzdinis GPIO kontaktas

# Nustatyti GPIO
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(SLAVE_SELECT, GPIO.OUT)

# Funkcija duomenims siųsti ir gauti
def transfer(data):
 GPIO.output(SLAVE_SELECT, GPIO.LOW)
 received = spidev.xfer2([data])
 GPIO.output(SLAVE_SELECT, GPIO.HIGH)
 return received[0]

try:
 while True:
 received_data = transfer(0x41)
 print(f"Gauta: {hex(received_data)}")
 time.sleep(1)

finally:
 spidev.close()
 GPIO.cleanup()

Pastabos:

4. USB ryšys

Prijungus „Arduino“ prie „Raspberry Pi“ per USB, sukuriamas virtualus nuoseklusis prievadas. Tai supaprastina techninės įrangos sąranką, nes jums tereikia USB laido.

Techninės įrangos sąranka:

Programinės įrangos diegimas:

Programinės įrangos diegimas yra labai panašus į nuosekliojo ryšio pavyzdį, išskyrus tai, kad nuoseklusis prievadas „Raspberry Pi“ greičiausiai bus identifikuojamas kaip `/dev/ttyACM0` (ar panašiai). „Arduino“ kodas lieka toks pat.

Pastabos:

5. Belaidis ryšys (ESP8266/ESP32)

Naudojant atskirą „Wi-Fi“ modulį, pvz., ESP8266 ar ESP32, suteikiama daugiau lankstumo ir didesnis veikimo nuotolis. „Arduino“ gali bendrauti su ESP moduliu per nuoseklųjį prievadą, o ESP modulis jungiasi prie „Raspberry Pi“ (ar kito serverio) per „Wi-Fi“.

Techninės įrangos sąranka:

Programinės įrangos diegimas:

Šis metodas apima sudėtingesnį kodavimą, nes reikia tvarkyti „Wi-Fi“ ryšį ir duomenų perdavimą ESP modulyje. Būtinos tokios bibliotekos kaip `ESP8266WiFi.h` (skirta ESP8266) ir `WiFi.h` (skirta ESP32).

Pastabos:

Praktiniai pritaikymai ir pasauliniai pavyzdžiai

„Arduino“ ir „Raspberry Pi“ derinys atveria daugybę įdomių pritaikymo galimybių įvairiose pramonės šakose visame pasaulyje:

1. Išmanusis žemės ūkis (pasauliniu mastu)

2. Namų automatizavimas (pasauliniu mastu)

3. Aplinkos stebėjimas (pasauliniu mastu)

4. Robotika (pasauliniu mastu)

5. Pramoninė automatika (pasauliniu mastu)

Kodų pavyzdžiai: praktinė demonstracija

Pateiksime paprastą pavyzdį, kuriame „Arduino“ nuskaito analoginio jutiklio vertę (pvz., temperatūros jutiklio) ir siunčia ją į „Raspberry Pi“ per nuoseklųjį ryšį. Tada „Raspberry Pi“ rodo gautą vertę konsolėje.

„Arduino“ kodas (temperatūros jutiklis):

void setup() {
 Serial.begin(9600);
}

void loop() {
 int temperature = analogRead(A0); // Nuskaito analoginę vertę iš A0 kontakto
 float voltage = temperature * (5.0 / 1023.0); // Konvertuoja į įtampą
 float temperatureCelsius = (voltage - 0.5) * 100; // Konvertuoja į Celsijaus laipsnius
 Serial.print(temperatureCelsius);
 Serial.println(" C");
 delay(1000);
}

„Raspberry Pi“ kodas („Python“):

import serial

try:
 ser = serial.Serial('/dev/ttyACM0', 9600)
except serial.SerialException as e:
 print(f"Klaida: Nepavyko atidaryti nuosekliojo prievado. Įsitikinkite, kad Arduino prijungtas ir prievadas nurodytas teisingai. Išsamesnė informacija: {e}")
 exit()

while True:
 try:
 data = ser.readline().decode('utf-8').strip()
 if data:
 print(f"Temperatūra: {data}")
 except UnicodeDecodeError as e:
 print(f"Unicode dekodavimo klaida: {e}")

 except serial.SerialException as e:
 print(f"Nuosekliojo prievado išimtis: {e}")
 break

 except KeyboardInterrupt:
 print("Uždaroma programa.")
 ser.close()
 break



Geriausios techninės įrangos integravimo praktikos

Norėdami užtikrinti sėkmingą „Arduino“ ir „Raspberry Pi“ integraciją, atsižvelkite į šias geriausias praktikas:

Dažniausiai pasitaikančių problemų sprendimas

„Arduino“ ir „Raspberry Pi“ integravimas kartais gali būti sudėtingas. Štai keletas dažniausiai pasitaikančių problemų ir jų sprendimų:

„Arduino“ ir „Raspberry Pi“ integravimo ateitis

Tikėtina, kad ateityje „Arduino“ ir „Raspberry Pi“ integracija taps dar sklandesnė ir galingesnė. Kylančios tendencijos apima:

Išvada

„Arduino“ ir „Raspberry Pi“ derinys yra galingas įrankis kuriant novatoriškus daiktų interneto sprendimus, turinčius pasaulinį pasiekiamumą. Suprasdami kiekvienos platformos privalumus ir laikydamiesi geriausių integravimo praktikų, galite atverti daugybę galimybių. Nuo išmaniojo žemės ūkio iki pramoninės automatikos – pritaikymo galimybes riboja tik jūsų vaizduotė.

Pasinaudokite techninės įrangos harmonijos galia ir pradėkite kurti savo prijungtą pasaulį jau šiandien!