树莓派与Arduino通过GPIO通信

树莓派折腾小记——树莓派与Arduino通过GPIO通信

01打开GPIO串口

打开配置

sudo raspi-config

选择Interfacing Optionsserial

然后出现

Would you like a login shell to be accessible over serial?NO

would you like the serial port hardware to be enabled?YES

出现

The serial login shell is disabled
The serial interface is enabled 

据说为取得稳定性,要把GPIO串口serial0映射到ttyAMA0上,与serial1映射的串口对换…

sudo vim /boot/config.txt

在末尾添加

dtoverlay=pi3-miniuart-bt

重启,ls -l /dev可以看到serial0映射到ttyAMA0serial1映射到ttyS0上了

02测试

<硬件>

树莓派TX\longleftrightarrow​ArduinoRX

树莓派RX\longleftrightarrow​ArduinoTX

树莓派GND\longleftrightarrow​ArduinoGND

LED+\longleftrightarrowArduinoPin13,LED-​\longleftrightarrowArduinoGND

<软件>

把这个上传到Arduino上

//arduino
char ch;
const int led=13;
int state=LOW;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
    if(Serial.available()) {
        ch=Serial.read();
        if(ch=='1') {
            state=HIGH;
            Serial.println("light is on.");
        } if(ch=='0') {
            state=LOW;
            Serial.println("light is off.");
        }
    }
    digitalWrite(led,state);
}

在树莓派上用python2运行这个(都怪python3-ras_GPIO库的迷之依赖)

#test.2py,python 2.7
import serial
ser = serial.Serial('/dev/ttyAMA0',9600,timeout=1)

#try:
while 1:
    info=raw_input()
    ser.write(info)
    repo = ser.readall()
    print repo
#except:
#  ser.close()

输入1,LED灯亮,输入0,LED灯灭…是不是很神(wu)奇(liao)~~~

pi@raspberrypi:~ $sudo python test.py
1
light is on.

0
light is off.

一个值得注意的事情是,python控制GPIO是真的慢…(C真香)
在实验中,当字符1输进去的那一刻,灯立刻就亮了,但过了快半秒arduino发出的light is on.才传回来。

发表评论

电子邮件地址不会被公开。 必填项已用*标注