需要用到4个GPIO,除了 5V 和 接地,还要用到 GPIO14 TxD 和 GPIO15 RxD,如下图所示。
实物接线图如下所示。
此节转载自“学习笔记-Raspberry Pi Zero W-4:串口(UART)的配置和使用”
(1)修改cmdline.txt文件 编辑cmdline.txt文件 $ sudo nano /boot/cmdline.txt 原来cmdline.txt文件的内容如下: console=serial0,115200 console=tty1 root=PARTUUID=a05c3c8f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles 将有关console的内容全部删掉,修改后的cmdline.txt文件内容如下: root=PARTUUID=a05c3c8f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles (2)关闭板载蓝牙 禁用蓝牙功能 $ sudo systemctl disable hciuart 编辑config.txt文件 $ sudo nano /boot/config.txt 增加如下一行: dtoverlay=pi3-disable-bt 重启树莓派 (3)禁用串口的控制台功能 编辑config.txt文件,增加如下一行: enable_uart=1代码中波特率设置要与模块相同,modbus数据地址根据模块的说明书。
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <wiringSerial.h> int main(int argc, char *argv[]) { int fd; if ((fd = serialOpen("/dev/ttyAMA0", 9600)) < 0) { fprintf(stderr, "Unable to open serial device: %s\n", strerror(errno)); return 1 ; } const char sendbuf[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A}; const char recvbuf[8]; while(1) { size_t count = write (fd, sendbuf, 8); count = read(fd, recvbuf, 8); if(count > 6){ int result = (recvbuf[3]<<8) + recvbuf[4]; printf("NOISE:%f\n", result/10.0); } delay(50); } }家里的环境噪声在50左右,我吹了哨子后达到90左右。