树莓派 3 java usb串口通讯485

0 参考链接

https://blog.csdn.net/qq_43725844/article/details/97682424
https://blog.csdn.net/fhqlongteng/article/details/80417028
https://pi4j.com/1.2/example/serial.html
https://www.jianshu.com/p/767fd1fbcaae
https://blog.csdn.net/qq_38839677/article/details/80618411
https://www.cnblogs.com/uestcman/p/9074737.html

1 环境装备

1.1 硬件准备

  • 1,树莓派 2,一跟串口转485的数据线
    树莓派usb串口连接 数据线, 485头连传感器设备。

  • 2 命令调试

//可出现所有的串口
lsusb
    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
    Bus 001 Device 003: ID 1a2c:2c27 China Resource Semico Co., Ltd
    Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
//看到了识别成了ttyUSB0 
ls -l /dev/tty* 
    crw--w---- 1 root tty       4,  9 Jan  3 09:17 /dev/tty9
    crw-rw---- 1 root dialout 204, 64 Jan  6 01:40 /dev/ttyAMA0
    crw------- 1 root root      5,  3 Jan  3 09:17 /dev/ttyprintk
    crw--w---- 1 root tty       4, 64 Jan  6 01:40 /dev/ttyS0
    crw-rw---- 1 root dialout 188,  0 Jan  6 02:59 /dev/ttyUSB0
//查看串口的波特率
stty -F /dev/ttyUSB0
    speed 9600 baud; line = 0;
    min = 0; time = 100;
    -brkint -icrnl -imaxbel
    -opost
    -isig -icanon -iexten -echo -echoe
//查看串口的连接信息
dmesg | grep ttyUSB0
    [    6.621718] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0

#保证 python 和pyserial 安装了。 树莓派4B
// 安装 pyserial
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
// 校验
gpio -v


pip list
//命令python查看安装到系统上的串口
python -m serial.tools.list_ports
// pyhon 调试
python
import serial
ser=serial.Serial('/dev/ttyUSB0',9600) #/dev/ttyUSB0 根据实际修改 波特率 根据传感器修改
ser.write('12345'.encode())


1.2 java代码

//确定 串口号/dev/ttyUSB0

package com.weepal.utils;// START SNIPPET: serial-snippet


import com.pi4j.io.serial.*;
import com.pi4j.util.CommandArgumentParser;
import com.pi4j.util.Console;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Date;
public class SerialExample {
    static final Logger log = LoggerFactory.getLogger(SerialExample.class);   //日志
    final static Serial serial = SerialFactory.createInstance();

    /**
     * This example program supports the following optional command arguments/options:
     *   "--device (device-path)"                   [DEFAULT: /dev/ttyAMA0]
     *   "--baud (baud-rate)"                       [DEFAULT: 38400]
     *   "--data-bits (5|6|7|8)"                    [DEFAULT: 8]
     *   "--parity (none|odd|even)"                 [DEFAULT: none]
     *   "--stop-bits (1|2)"                        [DEFAULT: 1]
     *   "--flow-control (none|hardware|software)"  [DEFAULT: none]
     *
     * @param args
     * @throws InterruptedException
     * @throws IOException
     */
    public static void main(String args[]) throws InterruptedException, IOException {
        try {

            SerialConfig config = new SerialConfig();
            config.device("/dev/ttyUSB0")
                  .baud(Baud._9600)
                  .dataBits(DataBits._8)
                  .parity(Parity.NONE)
                  .stopBits(StopBits._1)
                  .flowControl(FlowControl.NONE);

            if(args.length > 0){
                config = CommandArgumentParser.getSerialConfig(config, args);
            }


            serial.open(config);


            serial.addListener(new SerialDataEventListener() {
                @Override
                public void dataReceived(SerialDataEvent event) {


                    try {
                        System.out.println("[HEX DATA]   " + event.getHexByteString());
                        System.out.println("[ASCII DATA] " + event.getAsciiString());

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

            // continuous loop to keep the program running until the user terminates the program
            while(true) {
                try {
                    String order = "010300000001";
                    byte[] sbuf = CRC16MUtils.getSendBuf(order);
                    String requestStr = CRC16MUtils.getBufHexStr(sbuf);
                    serial.write(HexUtils.hexStringTobyte(requestStr));
                    System.out.println("write 010300000001" );
                }
                catch(IllegalStateException ex){
                    ex.printStackTrace();
                }

                Thread.sleep(1000 * 60 *5);
            }

        }
        catch(IOException ex) {
            System.out.println(" ==>> SERIAL SETUP FAILED : " + ex.getMessage());
            return;
        }
    }


}

// 代码结果
write 010300000001
[HEX DATA]   01,03,02,00,27,F8,5E




1.3 常见问题解决

  • /dev/ttyS0: Permission denied
1方法一 永久有效
//树莓派4B
vim /boot/cmdline.txt
// 注释 console-serial,115200
sudo vi /boot/cmdline.txt
// 添加 enable_uart=1
sudo vi /boot/config.tx
// 开启 uart接口 关闭shell访问,打开硬件串口
sudo raspi-config
    //选择Interfacing Options -> Serial -> Yes
// 重启
sudo reboot

//权限问题
groups ${USER}
sudo gpasswd --add ${USER} dialout

2方法二 临时有效
    chmod 660 /dev/ttyS0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 很多东西要多关注背后的潜在差异,了解真正的需求,利用去平均化来满足所有人的需求。
    姜杨Ada阅读 162评论 0 0
  • 今天公公婆婆要回老家了。 从5月4来上海,陪我们生活了25天,现在要走,还真有点舍不得。 在有公婆在的日子里: 清...
    孙苹阅读 251评论 1 2
  • 当想像中 空灵婉转的鸟鸣从深林中响起, 我们怀念小鸟。 当想像中 浓重的绿意和树间潮湿的风在身边漫开, 我们怀念森...
    life日出而作阅读 202评论 0 4
  • 雨伞遮住了风雨 遮住了阳光 让独行的人 有可以依靠的幻想 有的时候 把伞想象成你的目光 包围着远近的旅途 和停留的...
    涛涛不绝82阅读 326评论 0 3
  • 上周刚看完kindle电子书,李继宏译的版本,《月亮和六便士》豆瓣评分:8.7 导读很精彩,提到毛姆文中宣扬“精神...
    泛舟红尘阅读 3,019评论 0 4