树莓派 zero 串口采集噪声C/Python程序

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

  1. 树莓派,我是树莓派 zero w;
  2. 噪声模块,普遍比较贵,我淘的是这款 串口/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左右。

  

猜你喜欢

转载自blog.csdn.net/xhydongda/article/details/108959564