树莓派 zero 串口采集噪声CPython程序

    科技2025-04-27  15

        用树莓派测噪声,需要准备的东西:

    树莓派,我是树莓派 zero w;噪声模块,普遍比较贵,我淘的是这款 串口/TTL/0-3V 输出的,5V供电。

        接线方式:

        需要用到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

        C串口通讯程序:

        代码中波特率设置要与模块相同,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); } }

      Python版:

    import time import serial import sys import RPi.GPIO as GPIO port="/dev/ttyAMA0" usart=serial.Serial(port,9600,timeout=None) usart.flushInput() sendbuf = bytearray.fromhex("01 03 00 00 00 01 84 0A") while True: usart.write(sendbuf) recvbuf = bytearray(usart.read(7)) b1 = int(recvbuf[3]) b0 = int(recvbuf[4]) result = (b1<<8) | b0 print(result/10.0) time.sleep(.05) GPIO.cleanup()

      运行结果:

        家里的环境噪声在50左右,我吹了哨子后达到90左右。

      

     

    Processed: 0.012, SQL: 8