Ukulawula ihardware evela kwiRaspberry Pi Kumnandi kakhulu kwaye kuluncedo xa sele usazi iibhasi zayo zonxibelelwano. Ekusetyenzisweni kwansuku zonke, abadlali abaphambili yi-UART kunye ne-I2C: enye ibhasi ye-asynchronous serial yendabuko; enye, ibhasi ye-synchronous eneentambo ezimbini evumela izixhobo ezininzi ukuba ziqhagamshelwe ngaxeshanye. Nasi isikhokelo esicacileyo nesithe ngqo sokuzisebenzisa kwiRaspberry Pi.
Ukongeza ekuchazeni into abayiyo kunye nendlela yokuyenza isebenze, Uya kubona ulungelelwaniso lwehlabathi lokwenyani kwiRaspberry Pi. (i-serial console, izikhonkwane, izixhobo), imizekelo esebenzayo kwiPython, iinkcukacha ezintle malunga neBluetooth kunye ne-mini-UART kwiimodeli ezithile, kunye icandelo loxilongo Ngeziphoso eziqhelekileyo njengempazamo eyoyikekayo yeRemote ye-I/O xa uxuba i-I2C kunye ne-UART, siyibandakanyile Windows 10/IoT indlela kunye ne-RhProxy kunye ne-ACPI, ukuba usebenza kuloo ndawo.
Yintoni i-UART kunye ne-I2C kwaye kutheni kufuneka uzikhathalele?

I-UART (I-Universal Asynchronous Receiver-Transmitter) I-asynchronous serial interface ehambisa kwaye ifumane idatha ngaphandle kwewotshi ekwabelwana ngayo. Isebenzisa imigca emibini enikezelweyo: TX (inqanawa) y RX (ulwamkelo)Ekubeni kungekho wotshi, zombini iziphelo kufuneka zivumelane ngesantya esifanayo, oko kukuthi, i izinga baud (umzekelo, 9600, 115200 bps). Xa kuthelekiswa ne-SPI okanye i-I2C, ilula kwi-wire, nangona ngokuqhelekileyo icotha kwaye ikhomba-inqaku.
Kwelinye icala sinalo I2C (I-Inter-Integrated Circuit), i-synchronous serial protocol esebenza ngeengcingo ezimbini kuphela: I-SDA (idatha) kunye SCL (ikloko). Isixhobo ngasinye ebhasini sinaso 7 okanye 10 bit idilesi eyodwaOku kuvumela abenzi boluvo abaninzi, iziboniso, okanye izixhobo zememori ukuba ziqhagamshelwe kwimigca efanayo. Ixhasa izantya ezahlukeneyo (i-100 kHz esemgangathweni, i-400 kHz ngokukhawuleza, kunye neentlobo eziphezulu ezifana ne-3.4 Mbps) kunye iinkosi ezininzi Phantsi kweemeko ezithile.
Ngokwenza oko, I-UART ilungele i-consoles, i-GPS, iBluetooth okanye i-microcontrollers abathetha uthotho lwamandulo; I-I2C ikhanya ngokufunda izinzwa ezininzi ezinocingo oluncinci kunye nokudibanisa okulungileyo kwiiprojekthi IoT, iirobhothi kunye ne-automationZombini zisebenza ngokumangalisayo kunye kwiRaspberry Pi, ukuba nje ulungisa izikhonkwane zabo ngokuchanekileyo kwaye unqande ukugqithelana.
I-UART kwi-Raspberry Pi: Izikhonkwane, i-Console, kunye nezicwangciso eziphambili

KwiRaspberry Pi, Eyona UART iphambili ityhilwe kwiGPIO14 (TXD) kunye neGPIO15 (RXD) ye-40-pin isinxibelelanisi. Ngokuzenzekelayo, ezininzi imifanekiso yenkqubo vula i console series Ezi zikhonkwane ziluncedo kakhulu ukulungisa ingxaki ngaphandle kwemonitha okanye inethiwekhi. Ngokwembali, i-Broadcom SoC ibandakanya ii-UART ezimbini: UART0 (PL011, igqityiwe) y UART1 (mini-UART, itruncated).
Kwiimodeli ezifana neRaspberry Pi 3, I-UART "elungileyo" (PL011) igcinelwe iBluetooth kwaye ikhonsoli iyahamba iye kwimini-UART. Oku kuneziphumo: i-mini-UART ixhomekeke kwi-core frequency, kwaye ukuze izinze, iqhelekile. misela i-core_freq=250Ngaphandle koko, unokufumana ukuguquguquka kwesantya se-baud kunye nerhuluneli ephindaphindiweyo kwaye ulahlekelwe ngabalinganiswa abanjengokuphambana.
Ukuba ufuna ukusebenzisa i-UART yeprojekthi yakho endaweni yeconsole, into eqhelekileyo ukuyenza khubaza i-serial consoleUneendlela ezininzi onokukhetha kuzo: usebenzisa i-raspi-config kuNxibelelwano > Uthotho, khubaza ukungena kothotho (kodwa gcina ihardware yenziwe), okanye ngesandla ngokuhlela. /boot/cmdline.txt ukususa ikhonsoli=serial0,115200 y qalisa ngokutshaNgaloo nto, Izikhonkwane zeGPIO 14/15 zisimahla kwisicelo sakho.
Olunye ukhetho oluluncedo kakhulu kukusebenzisa i USB-UART iadapthaIintambo ezininzi zineentambo ezine: ezibomvu (5V), ezimnyama (GND), ezimhlophe, neziluhlaza (TX/RX). Ngokusetyenziswa okuqhelekileyo kunye neRaspberry Pi, Musa ukudibanisa ucingo olubomvu. (I-Pi sele izimele.) Xhuma i-GND kwi-GND, kwaye uwele i-TX ukuya kwi-RX (i-adapter ye-TX ukuya kwi-RX ye-Pi kunye nokuphambene). Qhagamshela isiphelo se-USB kwiPi ukunxibelelana nenye ibhodi okanye enye iPi nge... /dev/ttyUSB0 o /dev/ttyACM0.
Ukuvavanya i-serial console kwiRaspberry Pi ngokwayo usebenzisa iadaptha, Ungasebenzisa i-miniterm.py okanye enye i-serial terminal: miniterm.py /dev/ttyUSB0 115200Uza kubona umyalezo wokungena (igama lomsebenzisi) pi, inombolo yokuvula irasbheri (kwiinkqubo zakudala). Ukuphuma kwiminiterm kumzekelo weworkshop, sebenzisa Ctrl + AltGr + ]Ukuba ukhetha isikrini: isikrini /dev/ttyUSB0 115200 kwaye uphuma kunye Ctrl-A landelwa \.
I2C kwiRaspberry Pi: ukwenza, iingcingo, kunye nezixhobo ezibalulekileyo
I2C kwiRaspberry Pi Ivezwe kwizikhonkwane ezibonakalayo ze-3 kunye ne-5 zentloko (SDA1 kunye ne-SCL1, ehambelana ne-GPIO2 kunye ne-GPIO3). Inyathelo lokuqala kukuyinika amandla. KwiRaspberry OS, yiya ku Sudo raspi-isakhelo kwaye, kwi "Ukhetho oluPhezulu" okanye "Ukhetho lwe-Interface", vula I2CIwizard inikezela ngokulayisha imodyuli ekuqaleni.
Kuqwalaselo lwakudala, zongezwa kuyo / njl / iimodyuli imigca i2c-bcm2708 e i2c-devImifanekiso yanamhlanje yangoku sele iphethe izinto ezingaphezulu, kodwa i2c-dev Ihlala ingundoqo kwisithuba somsebenzisi. Faka izinto eziluncedo nge: sudo uhlaziywa y sudo apt ukufaka i2c-izixhobo zepython-smbus (o ipython3-smbus (ngokwenguqulelo yakho).
Ukuqinisekisa ukuba yonke into iyasebenza, qhuba lsmod | igrep i2c kwaye uya kubona iimodyuli ezilayishiwe. Emva koko, chonga ibhasi kwaye uyiphonononge ngayo i2cdetect -y 1 (kwiimodeli ezindala kakhulu, bekunjalo -kunye 0Ukuba kukho izixhobo eziqhagamshelwe ngokufanelekileyo kunye ne ukukhupha efanelekileyo SDA kunye SCL, scan uya kubonisa iidilesi ezifana 0x48, 0x20, Njl
Khumbula ukuba ibhasi ye-I2C ifuna ukutsala-up resistors kwi-SDA kunye ne-SCL (e-3.3 V kwi-Pi) kunye nokuba zonke izihlwele mazimanyane (i-GND eqhelekileyo). Ukungabikho kokutsalwa okanye ikhebula ende/engxolayo kunokubangela iingxaki eziphazamisayo okanye i-NACK, ngakumbi kwi-400 kHz nangaphezulu.
Ukuthetha i-I2C esuka kwiPython (smbus/smbus2)
Ukusebenzisana nezixhobo ze-I2C ezivela kwiPython, ungasebenzisa smus o smbus2Yifake ukuba kuyimfuneko nge pip faka i-smus2Umzekelo osisiseko wokubhala nokufunda kwidilesi 0x48 iya kuba koku kulandelayo:
from smbus2 import SMBus
DEVICE_ADDRESS = 0x48 # Dirección I2C del dispositivo
bus = SMBus(1) # Bus I2C 1 en Raspberry Pi
# Escribir un byte (por ejemplo, 0x01) al dispositivo
bus.write_byte(DEVICE_ADDRESS, 0x01)
# Leer un byte del dispositivo
data = bus.read_byte(DEVICE_ADDRESS)
print(f"Dato leÃdo: {data}")
bus.close()
Le pateni ye bhala/funda Ikunceda uqinisekise ukuba isixhobo siyaphendula. Ukuba ufumana i Impazamo ye-I/O ekude, ngokuqhelekileyo ikhoboka Ayinazi idilesi okanye irekhodi / intengiselwano ethunyelwe, okanye Imigca yeSDA/SCL ayikho kwimeko entle (i-pull-ups, i-wiring, i-GND okanye unikezelo lwamandla).
Unxibelelwano lwe-UART kunye ne-Arduino: i-USB okanye i-GPIO, ukhetha
Ukuze iRaspberry Pi kunye neArduino zinxibelelane ngokulandelelana, eyona ndlela ingqalileyo kuku Intambo ye-USBUqhagamshela iArduino kwiPi, kwaye izibuko elinje liya kuvela. /dev/ttyACM0 o /dev/ttyUSB0Ilungile kwaye inqanda inqanaba kunye neenkathazo zeconsole. Kungenjalo, ungasebenzisa Izikhonkwane zeGPIO (hardware UART) ukuba uvala ukungena kothotho nge raspi-uqwalaselo kwaye ushiya i-HW isebenza.
Faka ithala leencwadi lePython nge sudo apt ukufaka ipython3-serial kwaye ukhangele izibuko elikhoyo nge ls /dev/tty*KwiArduino, layisha umzobo olula othumela umbhalo:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello from Arduino!");
delay(1000);
}
KwiRaspberry Pi, umfundi omncinci one ipyserial Iya kujongeka ngolu hlobo:
import serial
import time
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
# Espera breve para que Arduino reinicie al abrir el puerto
time.sleep(2)
try:
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8', errors='ignore').strip()
print(f"Received: {data}")
except KeyboardInterrupt:
ser.close()
Ukuthumela idatha ukusuka kwiPi ukuya kwiArduino, ngokulula... ser.bhala(b"Molo kwiRaspberry Pi!\n") nakumzobo funda nge Uthotho.FundaUcuKude('\n')Ibalulekile loo nto zombini zisebenzisa isantya esifanayo (baud), kwaye kuyacetyiswa ukuba ulinde imizuzwana embalwa xa uvula izibuko ukuze i-ATmega iqalise kwakhona kwaye inqande "inkunkuma" yokuqala.
Indlela ye-Windows 10/IoT: Ii-APIs zabasebenzisi be-GPIO, i-I2C, i-SPI, kunye ne-UART ene-RhProxy kunye ne-ACPI
Ukuba usebenza kunye Windows 10/IoT Core okanye Windows Enterprise, kukho indlela yokwenza Veza iGPIO, I2C, SPI, kunye ne-UART kwimowudi yomsebenzisi ngokusebenzisa umlawuli ebizwa RhProxyUluvo kukubhengeza, kwiitafile ze-ACPI (ASL/AML), iSPB/GPIO imithombo evumelekileyo kumsebenzisi, kunye neRhProxy ibenza bafikeleleke ngeWindows.Devices.* APIs. Le yindlela esetyenziswa ziibhodi ezifana Raspberry Pi 2/3 kuloo nkqubo yendalo.
Indawo yokuqala kukudala i-node ye-ACPI njenge Isixhobo(RHPX) nge _HID/_CID «MSFT8000» kunye _UIDkwaye ngaphakathi chaza imithombo yohlobo I-SPISerialBus, I2CSerialBus, UARTSerialBus kunye GPIO kuvunyelwe kumsebenzisi. Kwi _DSD iipropathi zinxulunyaniswa nezinje ibhasi-SPI-SPI0, SPI0-MinClockInHz, SPI0-MaxClockInHz, SPI0-SupportedDataBitLengths o ibhasi-I2C-I2C1ukuze i-API ikwazi ukubuyisela "umlawuli omiselweyo" kwibhasi nganye.
Kwi-I2C, umzekelo wenkcazo iya kuba yinto enje I2CSerialBus(… «\_SB.I2C1» …), ngelixa ukwi-UART unayo UARTSerialBus ngamasimi e intsimbi yokuqala, ubunye, izithinteli kunye Umthombo yomlawuli. Kwi-SPI, nganye CE (itshiphu ekhethiweyo) Ibhengezwa njengesixhobo esahlukileyo kwaye emva koko idityaniswe ngebhasi kwiDSD kunye nezalathi zezibonelelo.
Ingqikelelo enamandla kule meko yi ixesha lokubaleka pin multiplexingNgezibonelelo ezikhethekileyo ze-ACPI MsftFunctionConfig(), izikhokelo GpioClx, SpbCx y I-SerCx Bayalela umlawuli weGPIO ukuba atshintshe umsebenzi wezikhonkwane xa umxhasi evula isixhobo (umzekelo, FromIdAsync() (kwi-UWP). Ukuba izikhonkwane sele zisetyenziswa ngomnye umsebenzi, ukuvulwa kuyasilela; xa uvala i-descriptor, yona ibuyisela umva ukuphindaphinda.
Ngokwembono yomphuhlisi weqonga, ukuqinisekiswa Ibandakanya ukujonga nge hlela ukuba SpbCx/GpioClx/SerCx abaqhubi ukulayisha, ukuba rhproxy ikhona kwinkqubo (iqhosha lobhaliso lwenkonzo), qulunqa i-ASL ukuze ACPITABL.dat nge asl.exe (imowudi /MsftInternal yeMsftFunctionConfig) kwaye uvule uvavanyoEmva koko unokudwelisa izixhobo zomsebenzisi ngezixhobo ezifana I2cTestTool.exe -luhlu, SpiTestTool.exe -luhlu, GpioTestTool.exe -uluhlu o MinComm.exe -uluhlukwaye uziqhelise ngemizekelo yokufunda/yokubhala. Ukufumana isatifikethi, qhuba iimvavanyo ze HLK (I2C WinRT, GPIO WinRT, SPI WinRT).
Ukuxuba i-I2C kunye ne-UART ngaphandle kweempazamo: Ukuxilongwa kwe-I / O ekude kunye nezinye izinto ezimangalisayo
Imeko eqhelekileyo: uqhuba inkqubo ethetha ngayo I-I2C ene-IMU sensor (ITG/MPU) kunye nenye esebenzayo UART kunye nomlawuli (umzekelo, i-SSC-32), kwaye ngokukhawuleza inkqubo ye-I2C iqhuma nge Impazamo ye-I/O ekudeLe mpazamo ibonisa ukuba utitshala akayifumani ACK Ebhasini: isixhobo asiphenduli okanye imigca ayikho kwimeko echanekileyo.
Ukuphuma kwi-traffic jam, jonga oku kulandelayo: 1) Uthotho console luvaliwe Ukuba usebenzisa izikhonkwane zeGPIO 14/15 kweyakho i-UART; 2) Kwi-Pi 3/derivatives, qwalasela Khubaza iBluetooth Ukuba ufuna i-PL011 UART izinze, okanye ilungiswe ubuncinane. core_freq=250 ukuba utsala i-mini-UART; 3) Khangela eqhelekileyo GND phakathi kwazo zonke izixhobo (Pi, IMU, controller), kunye a ukutya okucocekileyo (Ii-IMU zinovelwano kukuhla kwamandla).
4) Jonga i I2C idilesi: scan nge i2cdetect -y 1 kwaye uqinisekise ukuba idilesi (umzekelo, 0x68/0x69 kwii-IMU ezininzi) iyavela. Ukuba akunjalo, unokufuna ukusebenzisa ifayile ibhasi engalunganga, kukho intambo ephosakeleyo, okanye i ukukhupha5) Jonga i isantya sebhasi (Ukuba usebenzisa i-400 kHz kwaye ucwangciso lukwibhodi yesonka eneengcingo ezinde, yehlisa i-frequency ukuya kwi-100 kHz kunye novavanyo.) 6) Kulumkele ukufikelela kungquzulwano: nangona iLinux ivumela iinkqubo ezininzi kwi. /dev/i2c-1Ukuba imisonto emibini ifikelela ngokuhambelanayo ngaphandle kokulungelelanisa, unokubangela iimeko ezingaqhelekanga; sebenzisa izitshixo okanye ulandelelwano lwemisebenzi.
7) Ukuba impazamo ibonakala njengoko inkqubo ye-UART ilayisha okanye inyusa umthwalo we-CPU, krokrela i-mini-UART ayisebenzi ngenxa yokulinganisa rhoqo (uphawu kwiPi 3). Ilungisiwe core_freq=250 en / i / boot /config.txt okanye ikhupha i PL011 ye-UART yakho 8) Qinisekisa ukuba Awabelani ngezikhonkwane Phakathi kwezinye izinto: kwiWindows/IoT, ukuvulwa kuya kusilela ngenxa yokuphindaphinda; kwiRaspberry OS, isigqubuthelo okanye inkonzo inokuba igcina izikhonkwane ezithile zeGPIO zixakekile. 9) Ekugqibeleni, qinisekisa i ikheyibhuli yomzimba: I-SDA ene-SDA, i-SCL ene-SCL, ngaphandle kokuwela, kunye ne-TX-RX iwele ngokulandelelana.
Uvavanyo olukhawulezayo kunye nezinto eziluncedo ezigcina usuku
Kwi-I2C, i-trident esisiseko yile: i2cdetect -y 1 ukujonga izixhobo, i2cget/i2cset kwirejista elula yokufunda nokubhala, kunye nombhalo we smbus2 ukuqinisekisa olona qukuqelo. Ukuba i2 fumana Ayiboni i-IMU, musa ukuchitha ixesha lakho ngekhowudi: Kukho ingxaki yomzimba okanye yokwaleka..
Kwi-UART, sebenzisa ixesha elincinci.py o wekhusi njengothotho lwesiphelo sendlela kwaye uqinisekise ukuba ungathumela/ukufumana ngesantya esikhethiweyo ngaphandle konobaphi na abalinganiswa abangaqhelekanga. KwiPython, ipyserial nge ixesha lokumisa kunye nokunqumamisa okuncinci kokuqala Ngokuqhelekileyo iyakuphepha ukufunda okungenanto. Kwaye ukuba usebenza ngeWindows IoT, hlela, ACPITABL.dat nge asl.exe kunye nezixhobo zomzekelo I2cTestTool/SpiTestTool/GpioTestTool/MinComm Zikunika ukubonakala ngokupheleleyo.
Ngoku unemephu epheleleyo yokusebenza nge-I2C kunye ne-UART. kwiRaspberry OS (kwaye nakwiWindows/IoT ukuba iyasebenza): ukusuka kwinto abayiyo kunye nendlela yokuyivula, ukuya kusetyenziso lwabo kwiPython, ukuphatha i-console, iimpawu ze-UART kwiPi 3 kunye ne-pin multiplexing, kwisisombululo Inqaku le-121 Xa udibanisa zombini iibhasi, ziqwalaselwe ngokufanelekileyo kunye ne-wiring ecocekileyo, zizixhobo ezinamandla kuyo nayiphi na inzwa, i-robotics, okanye iprojekthi yokulawula.