Kudzora hardware kubva kuRaspberry Pi Iyo inonakidza kwazvo uye inobatsira kana iwe uchinge wagona mabhazi ayo ekutaurirana. Mukushandiswa kwemazuva ese, vatambi vakakosha ndivo UART uye I2C: imwe ndeyechinyakare asynchronous serial bhazi; imwe yacho, maviri-waya synchronous bhazi inobvumira akawanda madivayiri kuti abatanidzwe panguva imwe chete. Heino gwara rakajeka uye rakatwasuka rekuvashandisa muRaspberry Pi.
Pamusoro pekutsanangura zvavari uye kuti vozvimisa sei, Iwe uchaona chaiyo-yenyika zvigadziriso paRaspberry Pi. (serial console, mapini, maturusi), mienzaniso inoshanda muPython, yakanaka ruzivo nezveBluetooth uye mini-UART mune mamwe mamodheru, uye a diagnostic chikamu Kune zvikanganiso zvakajairika senge inotyisa Remote I/O kukanganisa pakusanganisa I2C neUART, isu takabatanidza iyo Windows 10/IoT nzira neRhProxy uye ACPI, kana uri kushanda mumunda iwoyo.
Chii chinonzi UART neI2C uye nei uchifanira kuita hanya?

UART (Universal Asynchronous Receiver-Transmitter) Iyo asynchronous serial interface inotumira uye inogamuchira data pasina wachi yakagovaniswa. Inoshandisa mitsara miviri yakatsaurirwa: TX (kutumira) y RX (kugamuchira)Sezvo pasina wachi, migumo yose miviri inofanira kubvumirana pakukurumidza kumwechete, ndiko kuti, the baud rate (semuenzaniso, 9600, 115200 bps). Kuenzaniswa neSPI kana I2C, iri nyore kuisa waya, kunyange zvazvo inowanzononoka uye inonongedza-ku-point.
Kune rumwe rutivi tine I2C (Inter-Integrated Circuit), synchronous serial protocol inoshanda newaya mbiri chete: zviwanikwa (data) uye SCL (wachi). Imwe neimwe mudziyo mubhazi ine 7 kana 10 bit yakasarudzika keroIzvi zvinobvumira masensa akawanda, zviratidziro, kana zvigadziriso zvekurangarira kuti zvibatanidzwe kune mitsetse yakafanana. Inotsigira kumhanya kwakasiyana (100 kHz chiyero, 400 kHz nekukurumidza, uye mhando dzepamusoro dzakadai se3.4 Mbps) uye multi-master Pasi pemamwe mamiriro.
Mukuita, UART yakanakira consoles, GPS, Bluetooth kana microcontrollers inotaura classic serial; I2C inopenya yekuverenga akawanda ma sensor ane mashoma wiring uye yakanaka kubatanidzwa mumapurojekiti IoT, marobhoti uye otomatikiVese vari vaviri vanoshanda pamwe chete zvinoshamisa paRaspberry Pi, chero bedzi iwe uchigadzirisa mapini avo nemazvo uye kudzivirira kupindirana.
UART paRaspberry Pi: Pini, Console, uye Key Settings

PaRaspberry Pi, Iyo huru UART inoburitswa paGPIO14 (TXD) uye GPIO15 (RXD) ye40-pini yekubatanidza. By default, akawanda system mifananidzo activate the console series Aya mapini anobatsira kwazvo kugadzirisa pasina chekutarisa kana network. Nhoroondo, iyo Broadcom SoC inosanganisira maviri maUART: UART0 (PL011, yakakwana) y UART1 (mini-UART, truncated).
Mune mhando dzakadai seRaspberry Pi 3, Iyo "yakanaka" UART (PL011) yakachengeterwa Bluetooth uye iyo console inotamira kune mini-UART. Izvi zvine mhedzisiro: iyo mini-UART inoenderana neiyo musimboti frequency, uye kuti igadzikane, inowanzo. set core_freq=250Zvikasadaro, iwe unogona kusangana nebaud chiyero kusiyanisa ne frequency governor uye kurasikirwa nemavara seanopenga.
Kana iwe uchida kushandisa UART yepurojekiti yako panzvimbo yekoni, chinhu chakajairika kuita dzima serial consoleIwe une akati wandei sarudzo: kushandisa raspi-config muInterfaces> Serial, disable serial login (asi chengeta Hardware yakagoneswa), kana nemaoko nekugadzirisa. /boot/cmdline.txt kubvisa console=serial0,115200 y rebootNezvo, GPIO mapini 14/15 ndeemahara kune yako application.
Imwe sarudzo inobatsira ndeye kushandisa a USB-UART adaptaTambo dzakawanda dzine waya ina: dzvuku (5V), dema (GND), chena, uye girini (TX/RX). Muchinyakare kushandiswa neRaspberry Pi, Usabatanidza waya tsvuku. (Iyo Pi yatozvishandisa yega.) Batanidza GND kuGND, woyambuka TX kuenda kuRX (adapter's TX kuenda kuPi's RX uye zvichipesana). Batanidza iyo USB yekupedzisira kuPi kuti utaure neimwe bhodhi kana imwe Pi kuburikidza... /dev/ttyUSB0 o / dev / ttyACM0.
Kuedza serial console kubva kuRaspberry Pi pachayo uchishandisa adapta, Unogona kushandisa miniterm.py kana imwe serial terminal: miniterm.py/dev/ttyUSB0 115200Iwe uchaona iyo login yekukurumidza (zita rekushandisa) pi, pasiwedhi raspberry (mune classic systems). Kubuda miniterm mumuenzaniso wemusangano, shandisa Ctrl + AltGr + ]Kana iwe uchida skrini: skrini /dev/ttyUSB0 115200 uye unobuda newe Ctrl-A seguido de \.
I2C paRaspberry Pi: inogonesa, wiring, uye zvakakosha maturusi
I2C paRaspberry Pi Inoburitswa pamapini emuviri 3 uye 5 yemusoro (SDA1 uye SCL1, inoenderana neGPIO2 uye GPIO3). Nhanho yekutanga ndeye kuigonesa. MuRaspberry OS, enda ku sudo raspi-gadziriso uye, mu "Advanced Options" kana "Interface Options", shandisa I2CIyo wizard inopa kurodha module pakutanga.
Mune zvigadziriso zvekare, ivo vakawedzerwa kune / etc / modules mitsara i2c-bcm2708 e i2c-devMazuva ano mifananidzo ichangoburwa inotobata zvakavharika, asi i2c-dev Inoramba ichikosha kune nzvimbo yemushandisi. Isa zvishandiso ne: sudo apt update y sudo apt kuisa i2c-zvishandiso python-smbus (o python3-smbus (maererano neshanduro yako).
Kuti uone kuti zvese zviri kushanda, mhanya lsmod | grep i2c uye iwe uchaona akarodha mamodule. Wobva waziva bhazi woriongorora nayo i2cdetect -y 1 (mumamodeli ekare, zvaive -uye 0Kana paine michina yakanyatsobatanidzwa uye ine pull-ups yakakodzera SDA uye SCL, scan yacho inoratidza kero dzakadai 0x48, 0x20, Etc.
Rangarira kuti I2C bhazi inoda kudhonza-up resistors muSDA uye SCL (pa3.3 V paPi) uye izvo vanhu vose vanofanira kubatana (yakajairika GND). Kusavapo kwekudhonza-ups kana kureba/ruzha cabling kunogona kukonzera matambudziko epakati kana NACK, kunyanya pa400 kHz uye pamusoro.
Kutaura I2C kubva kuPython (smbus/smbus2)
Kudyidzana neI2C zvishandiso kubva kuPython, unogona kushandisa smus o smbus2Isa kana zvichidikanwa ne pip kuisa smus2Muenzaniso wekutanga wekunyora nekuverenga kukero 0x48 ichave inotevera:
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()
Uyu muenzaniso we nyora/verenga Zvinokubatsira kuona kuti mudziyo uri kudaira. Kana ukasangana ne Remote I/O kukanganisa, kazhinji muranda Haisi kuziva kero kana rekodhi / kutengeserana kwakatumirwa, kana Iyo SDA/SCL mitsetse haisi muchimiro chakanaka (kudhonza-ups, wiring, GND kana magetsi).
UART kutaurirana neArduino: USB kana GPIO, iwe unosarudza
Kuti Raspberry Pi uye Arduino vataurirane seri, nzira yakananga ndeye USB CableIwe unobatanidza iyo Arduino kuPi, uye chiteshi chakadai chinozoonekwa. / dev / ttyACM0 o /dev/ttyUSB0Zviri nyore uye zvinodzivirira nhanho uye console matambudziko. Neimwe nzira, unogona kushandisa GPIO mapini (hardware UART) kana ukadzima serial login ne raspi-gadziriso uye unosiya HW ichishanda.
Isa iyo Python serial raibhurari ne sudo apt kuisa python3-serial uye tsvaga chiteshi chiripo ne ls /dev/tty*MuArduino, rodha sketch iri nyore inotumira mavara:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello from Arduino!");
delay(1000);
}
PaRaspberry Pi, muverengi mudiki ane pyserial Zvinotaridzika seizvi:
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()
Kutumira data kubva kuPi kuenda kuArduino, zviri nyore... ser.write(b"Mhoro kubva kuRaspberry Pi!\n") uye muchidimbu verenga ne Serial.readStringUntil('\n')Zvakakosha kuti ose ari maviri anoshandisa kumhanya kwakafanana (baud), uye zvinokurudzirwa kumirira mashoma mashoma paunenge uchivhura chiteshi kuitira kuti ATmega itangezve uye kudzivirira yekutanga "marara".
The Windows 10/IoT maitiro: Mushandisi APIs eGPIO, I2C, SPI, uye UART ine RhProxy uye ACPI.
Kana ukashanda nayo Windows 10/IoT Core kana Windows Enterprise, pane nzira yeku Ratidza GPIO, I2C, SPI, uye UART kune mushandisi maitiro kuburikidza nemutungamiriri akadanwa RhProxyPfungwa ndeyekuzivisa, mumatafura eACPI (ASL/AML), SPB/GPIO zviwanikwa zvinotenderwa kumushandisi, uye RhProxy inoita kuti zviwanikwe kuburikidza neWindows.Devices.* APIs. Iyi ndiyo nzira inoshandiswa nemabhodhi akadai Raspberry Pi 2/3 mune iyo ecosystem.
Nzvimbo yekutanga ndeyekugadzira ACPI node se Mudziyo(RHPX) game _HID/_CID «MSFT8000» uye a _UIDuye mukati tsanangura zviwanikwa zvemhando SISerialBus, I2CSerialBus, UARTSerialBus and the GPIO inobvumirwa kumushandisi. Mu _DSD zvivakwa zvakabatana nazvo se bhazi-SPI-SPI0, SPI0-MinClockInHz, SPI0-MaxClockInHz, SPI0-SupportedDataBitLengths o bhazi-I2C-I2C1kuitira kuti API idzore "default controller" yebhazi rega rega.
Kune I2C, muenzaniso weanotsanangura angave chinhu chakadai I2CSerialBus(… «\_SB.I2C1» …), apo zveUART une UARTSerialBus neminda ye dambudziko rekutanga, parity, buffers and the ResourceSource wemutongi. Mune SPI, imwe neimwe CE (chip sarudza) Iyo inoziviswa seyakasiyana sosi uye yobva yaunganidzwa nebhazi muDSD ine zviwanikwa zviwanikwa.
Pfungwa ine simba munharaunda iyi ndeye runtime pini multiplexingKuburikidza neakakosha ACPI zviwanikwa MsftFunctionConfig(), zvimiro GpioClx, SpbCx y SerCx Vanoraira GPIO controller kushandura basa repini kana mutengi avhura mudziyo (semuenzaniso, Kubva kuIdAsync() (muUWP). Kana mapini anga atove kushandiswa nerimwe basa, kuvhura kunokundikana; pakuvhara descriptor, iyo inodzokera multiplexing.
Kubva pamaonero emugadziri wepuratifomu, kusimbiswa Zvinosanganisira kutarisa ne devcon iyo SpbCx/GpioClx/SerCx vatyairi vanotakura, izvo rhproxy iripo muhurongwa (kiyi yekunyoresa sevhisi), gadzira iyo ASL kuti ACPITABL.dat game asl.exe (nzira /MsftInternal yeMsftFunctionConfig) uye shandisa testsigningIpapo iwe unogona kunyora mushandisi zvishandiso zvine maturusi akadai I2cTestTool.exe -list, SpiTestTool.exe -list, GpioTestTool.exe -list o MinComm.exe -listuye dzidzidzise nemuenzaniso wekuverenga / kunyora zviitwa. Kuti uwane chitupa, mhanyisa bvunzo dze H.L.K. (I2C WinRT, GPIO WinRT, SPI WinRT).
Kusanganisa I2C uye UART pasina zvikanganiso: Remote I/O diagnostics uye zvimwe zvinoshamisa
Chiitiko chakajairika: iwe unomhanyisa chirongwa chinotaura kuburikidza I2C ine IMU sensor (ITG/MPU) uye imwe inoshandisa UART ine controller (semuenzaniso, SSC-32), uye kamwe kamwe I2C maitiro anoputika ne Remote I/O kukanganisaKukanganisa uku kunoratidza kuti mudzidzisi haasi kugamuchira ACK Mubhazi: mudziyo hausi kupindura kana mitsetse haisi muchimiro chakakodzera.
Kuti ubude mu traffic jam, tarisa zvinotevera: 1) Seri console yakadzimwa Kana iwe ukashandisa GPIO pini 14/15 kune yako UART; 2) PaPi 3/derivatives, funga Dzima Bluetooth Kana iwe uchida iyo PL011 UART kuti igadzikane, kana kuti igadziriswe. musimboti_freq=250 kana iwe ukadhonza mini-UART; 3) Tarisa common GND pakati pemidziyo yese (Pi, IMU, controller), uye a kudya kwakachena (IMUs inonzwa kudonha kwesimba).
4) Tarisa iyo I2C kutaura: scan ne i2cdetect -y 1 uye ita shuwa kuti kero (semuenzaniso, 0x68/0x69 pamaIMU mazhinji) inooneka. Kana zvisina kudaro, iwe ungangoda kushandisa iyo bhazi rakashata, pane tambo yakashata, kana kuti pull-ups5) Tarisa iyo kumhanya kwebhazi (Kana uri kushandisa 400 kHz uye setup iri pabreadboard ine waya refu, dzikisa frequency kusvika 100 kHz uye test.) 6) Dzivisa kudhumhana kwekuwana: kunyangwe Linux ichibvumira maitiro akawanda pa. /dev/i2c-1Kana tambo mbiri dzichipinda dzakafanana pasina kurongeka, unogona kukonzera zvisinganzwisisike mamiriro; use makiyi kana kuita serilizes mashandiro.
7) Kana kukanganisa kuchionekwa sekunge chirongwa cheUART chinotakura kana kuwedzera CPU mutoro, fungidzira mini-UART haina kuwiriraniswa nekuda kwe frequency scaling (chiratidzo muPi 3). Fixed musimboti_freq=250 en /boot/config.txt kana kuburitsa iyo PL011 yeUART yako 8) simbisa izvozvo Iwe haugovani mapini Pakati pezvimwe zvinhu: muWindows / IoT, kuvhura kwaizotadza nekuda kwekuwanda; muRaspberry OS, chifukidziro kana sevhisi inogona kunge ichichengeta mamwe mapini eGPIO akabatikana. 9) Pakupedzisira, simbisa iyo physical cabling: SDA ine SDA, SCL ine SCL, isina kuyambuka, uye TX-RX yakayambuka munhevedzano.
Kurumidza bvunzo uye zvishandiso zvinochengetedza zuva
Kune I2C, iyo yekutanga trident ndeiyi: i2cdetect -y 1 kuona zvishandiso, i2cget/i2cset yerejista iri nyore kuverenga nekunyora, uye script ye smbus2 kusimbisa kuyerera chaiko. Kana i2cdetect Iyo haione iyo IMU, usatambise nguva yako nekodhi: Pane dambudziko remuviri kana repamusoro..
Kune UART, shandisa miniterm.py o sikirini se serial terminal uye simbisa kuti unogona kutumira / kugamuchira nekumhanya kwakasarudzwa pasina chero mavara asinganzwisisike. MuPython, pyserial game kupera kwenguva uye kumbomira kupfupi kwekutanga Kazhinji inodzivisa kuverenga kusina chinhu. Uye kana uri kushanda neWindows IoT, devcon, ACPITABL.dat game asl.exe uye mienzaniso zvishandiso I2cTestTool/SpiTestTool/GpioTestTool/MinComm Vanokupa kuonekwa zvachose.
Iwe zvino wave nemepu yakazara yekushanda neI2C uye UART. paRaspberry OS (uye zvakare paWindows/IoT kana zvichibvira): kubva pane zvavari uye nemabatiro avangaita, kusvika pakushandisa kwavo muPython, kubata kweconsole, maUART maficha paPi 3 uye pini yekuwedzera, kugadzirisa Erno 121 Paunosanganisa ese mabhazi, akagadzirirwa zvakanaka uye ane waya yakachena, iwo maturusi akasimba kune chero sensor, marobhoti, kana purojekiti yekudzora.