树莓派串口/RS485通信

树莓派原生串口默认用于控制台输出,如果想在自己程序里使用需要先关闭系统占用此串口。

方法为rasp-config 里配置,或直接修改/boot/cmdline.txt

#dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwai

dwc_otg.lpm_enable=0 console=tty1  root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwai


修改后就会多出一个串口设备文件/dev/ttyAMA0, 可以用命令stty -F /dev/ttyAMA0   9600设置串口参数等

可以安装命令行下调试软件minicom进行串口设置及数据收发

sudo apt-get install minicom

如果装了桌面系统就更多图形化调试工具了如cutecom


系统自带的串口是TTL电平,如果要和RS485设备通信,需要接一块485转换芯片,现成的可以直接插在板子上用的见链接

https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-951511554.15.23a61349h5N5xG&id=563656341277


可以买空板自己买元件焊接或买焊好现成的。板子上的芯片为ADM2587 ,芯片级电源和信号都隔离的485芯片,成本不低,但对于电机等干扰大及走室外的对安全要求高的建议用隔离的。以免系统不稳定或烧坏主板


也可以直接用USB转485小模块,适合于调试等不是24小时用的场合。USB经常不稳定,同时模块也没有做信号隔离

https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-951511554.15.23a61349h5N5xG&id=563656341277

接上去不用装驱动,自动会多出一个串口设备文件 /dev/ttyUSB0

用法和编程与前文一样


由于最两款模块都自带收发控制自动切换,如果不用改程序控制一个DI/RI引脚,当然如果波特率很高,最好还是手动控制。GPIO的控制可以使用wringpi 库,同时串口程序也可以使用wringpi 这个库来写



各种语言的串口通信:


C语言,使用wringpi库,调用 LINUX api的网上大量代码就不介绍了

#include <wiringSerial.h>

int main(void)

{

    int fd;

    if((fd = serialOpen ("/dev/ttyAMA0",9600))<0)

    {

        printf("serial err\n");

    }

    while(1)

    {

        UartBuff[0]=serialGetchar(fd);

        if(UartBuff[0]=='a')

        {

         serialPutchar(fd,UartBuff[0]);

        }

        sleep(0.5);

    }

    return EXIT_SUCCESS;

 }



PYTHON 安装pyserial 模块

http://www.cnblogs.com/starspace/archive/2009/02/20/1394603.html

>>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)
>>> x = ser.read()          # read one byte
>>> s = ser.read(10)        # read up to ten bytes (timeout)
>>> line = ser.readline()   # read a '\n' terminated line
>>> ser.close()


shell:

echo "123" > /dev/ttyAMA0

cat /dev/ttyAMA0


PHP: 安装扩展

https://github.com/oasynnoum/phpmake_serialport

 <?php

    use PHPMake\SerialPort;

    // $device = 'COM4'; // on Windows

    $device = '/dev/ttyUSB0'; // on Linux 


    /*

     * create new instance

     */

    $port = new SerialPort();


    try {

        /* 

         * open the port

         */

        $port->open($device);

    

        /*

         * configure baud rate

         *

         * you can specify baud rate as integer, 

         * or other class constants like SerialPort::BAUD_RATE_*

         */

        $port->setBaudRate(SerialPort::BAUD_RATE_9600);

    

        /*

         * configure flow control

         * 

         * any other options are below.

         * SerialPort::FLOW_CONTROL_SOFT is software flow control.

         * SerialPort::FLOW_CONTROL_HARD is hardware flow control.

         */

        $port->setFlowControl(SerialPort::FLOW_CONTROL_NONE);

    

        /*

         * configure canonical mode

         * 

         * canonical mode is for text-based communication.

         * non-canonical mode is binary-safe.

         * more detail information about VMIN and VTIME, 

         * see http://www.unixwiz.net/techtips/termios-vmin-vtime.html

         */

        $port->setCanonical(false)

                ->setVTime(1)->setVMin(0);

    

        /*

         * read data from port.

         * you can get size of actual read data with strlen($data) .

         */

        $data = $port->read(256);

    

        /*

         * send data.

         */

        $port->write($data);

    

    } catch (Exception $e) {

        print $e->getMessage() . PHP_EOL;

    }


    if ($port->isOpen()) $port->close();


  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值