精华内容
下载资源
问答
  • arduino实现软串口通信

    万次阅读 多人点赞 2019-06-28 12:11:31
    在之前不懂的情况下也做过类似的查阅文档和网上研究,基本靠拿来主义得到的都是硬串口和软串口之间通信,要么就是简单介绍软串口通信的基础知识,很少或基本看不到软串口之间的通信资料,今天我就向大家详细介绍下...
    uno和nano主板软串口通信
    uno和nano实现软串口通信

          最近不忙,闲来总结一下arduino板之间是如何通过软串口实现通信的。在之前不懂的情况下也做过类似的查阅文档和网上研究,基本靠拿来主义得到的都是硬串口和软串口之间通信,要么就是简单介绍软串口通信的基础知识,很少或基本看不到软串口之间的通信资料,今天我就向大家详细介绍下软串口之间是怎么通信的,整个文章思路起源于《arduino程序设计基础》的某篇通信理论为基础,在此进行的知识拓展。

        软串口就是用程序模拟硬串口实现通信的功能,可以在arduino主板的引脚进行模拟实现。现在,我的实验需要两台电脑,通过USB接口连接各自arduino主板,实现硬串口连接,另外,利用uno板上的2,3引脚和nano板上的d5,d6引脚交叉对联实现软串口通信。这里给没基础的爱好者们先上一张串口对联示意图:

        tx:就是发送端;rx:就是接收端;gnd:共地。两两交叉对联。下面我直接贴代码跟大伙交流交流:下面是nano的主程序:

    /*
     * Serial  =======computer
     * softSerial ======nano Serial1
     */
    #include<SoftwareSerial.h>
    //新建一个softSerial对象,rx:6,tx:5
    SoftwareSerial softSerial1(6,5);
    
    void setup() {
      // 初始化串口通信:
      Serial.begin(9600);
      //初始化软串口通信;
      softSerial1.begin(9600);
      //监听软串口通信
      softSerial1.listen();
    }
    // 两个字符串分别用于存储A、B两端传来的数据:
      String device_B_String="";
      String device_A_String="";
      
    void loop() {
      // 读取从计算机传入的数据,并通过serial1发送个设备B:
      if(Serial.available()>0)
      {
        if(Serial.peek()!='\n')   //在没接收到回车换行的条件下
        {
          device_B_String+=(char)Serial.read();   //这段代码是在把字符串联成字符串
        }
        else
        {  //这段代码实现从缓冲区读取数据,并将数据发送到计算机显示和软串口发送;
          Serial.read();
          Serial.print("you said:");
          Serial.println(device_B_String);
          softSerial1.println(device_B_String);
          device_B_String="";
        }
      }
      //读取从设备A传入的数据,并在串口监视器中显示
      
      if(softSerial1.available()>0)
      {
       
        if(softSerial1.peek()!='\n')
        {
          device_A_String+=(char)softSerial1.read();
        }
        else
        {
          softSerial1.read();
          Serial.print("device A said:");
          Serial.println(device_A_String);
          device_A_String="";
        }
       
      }
    
    
    
    }
    

    下面是uno主程序:

    /*
     * arduino uno端程序
     * 串口使用情况
     serial -----computer
     serial1----- nano softwearserial
     */
     #include<SoftwareSerial.h>
     SoftwareSerial softSerial(3,2);
     
    void setup() {
      //初始化serial,该串口用于与计算机连接通信:
      Serial.begin(9600);
      //初始化serial1,该串口用于与设备B连接通信;
      softSerial.begin(9600);
      softSerial.listen();
    }
    //两个字符串分别用于存储A,B两端传来的数据
    String device_A_String="";
    String device_B_String="";
    
    void loop() {
      // 读取从计算机传入的数据,并通过softSerial发送个设备B:
      if(Serial.available()>0)
      {
        if(Serial.peek()!='\n')
        {
          device_A_String+=(char)Serial.read();
         
        }
        else
        {
          Serial.read();
          Serial.print("you said:");
          Serial.println(device_A_String);
          softSerial.println(device_A_String);
          device_A_String="";
         
        }
      }
      //读取从设备B传入的数据,并在串口监视器中显示
      if(softSerial.available()>0)
      {
        if(softSerial.peek()!='\n')
        {
          device_B_String+=(char)softSerial.read();
        }
        else
        {
          softSerial.read();
          Serial.print("device B said:");
          Serial.println(device_B_String);
          device_B_String="";
        }
      }
    }
    

        以上两段代码主要实现发送信息和接收信息功能。在不能实现接收数据的常见问题主要有:1,检查USB硬串口是否连接正常;2,软串口各引脚连接是否正常,(我曾遇到自己把引脚线插错到A2,A3导致无法通信)。

        其实实现的原理很简单:在计算机A中打开arduinoIDE的串口监视器,随意输入字母或数字,点击发送,计算机A通过硬串口把内容发送到与该计算机连接的arduino主板串口中,主板将发送信息存储到变量中,再通过arduino板的软串口发送到另一arduino板的软串口接收,并存储到接收端变量中,再通过接收端的硬串口输出接收到的信息到计算机B的串口监视器中。以下就是测试代码的效果图:

     

    展开全文
  • Arduino和Xbee软串口通信

    千次阅读 2019-01-11 23:10:01
    Arduino Uno只有一个硬件软口,在与蓝牙,无线通信的时候我们需要另外设置一个软串口才能实现。 Arduino 官方提供了软件串口的库,可以将任意两个数字端口,模拟成串口。软件串口库不需要下载,IDE 已经集成,打开...

    Arduino Uno只有一个硬件软口,在与蓝牙,无线通信的时候我们需要另外设置一个软串口才能实现。
    Arduino 官方提供了软件串口的库,可以将任意两个数字端口,模拟成串口。软件串口库不需要下载,IDE 已经集成,打开“菜单 -> 项目 -> 加载库 -> SoftwareSerial “即可加载。#include <SoftwareSerial.h>
    Arduino接入电脑,使用数字引脚2、3模拟软串口,将2设置为RX,3设置为TX,分别与Xbee模块的TX和RX连接,5V连5V,GND 连接 GND,然后将Xbee接入电脑。
    打开两个Arduino程序,分别监控不同的串口,这样就可以实现两个软串口之间的通信了。我们在一段发送数据,另一端就能接收和显示。
    在这里插入图片描述

    实物连接图

    展开全文
  • Arduino使用软串口通信

    万次阅读 多人点赞 2017-11-12 20:02:10
    之前学习Arduino时没有接触过软串口,不过后来我买了一个Esp8266模块,在网上找的参考资料中给出的代码大部分都是Arduino使用软串口与Esp8266通信,但是我在使用的时候一直有问题,总是出现乱码。不清楚是不是我...
    之前学习Arduino时没有接触过软串口,不过后来我买了一个Esp8266模块,在网上找的参考资料中给出的代码大部分都是Arduino使用软串口与Esp8266通信,但是我在使用的时候一直有问题,总是出现乱码。不清楚是不是我软串口用的有问题,所以就想好好把软串口看看,顺便写篇文章记录一下。在网上查资料找的资料中,参考文献1对软串口库中的函数进行了介绍,而参考文献2对软串口的原理进行了说明,还给了个示例用来展示软串口和串口之间的通信。
    1、软串口和串口之间通信
    本节参考参考文献2,使用数字引脚2、3模拟软串口,将这两个引脚与USB转TTL模块连接,然后接入电脑,然后Arduino也接入电脑,将下列代码下载到Arduino中,打开两个Arduino程序,分别监控不同的串口,这样就可以实现两个软串口之间的通信了。

    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(2,3);//RX=2,TX=3
    void setup()
    {
    //硬件串口波特率
    Serial.begin(4800);
    //软件串口波特率
    mySerial.begin(9600);
    }
    void loop()
    {
    //如果硬件串口有数据
    if(Serial.available())
    {
    //从硬件串口读出一字节,写入软件串口
    mySerial.write(Serial.read());
    }
    //如果软件串口有数据
    if(mySerial.available())
    {
    //从软件串口读出一字节,写入硬件串口
    Serial.write(mySerial.read());
    }
    }

    实物连线图如下图所示:
    Arduino使用软串口通信 - gc_2299 - gc_2299的博客
     
    测试过程中发现,从高波特率的串口向低波特率的串口发送中文、英文、数字都没有问题,但是从低波特率的窗口向高波特率的串口只能发送英文、数字,发送中文的话,高波特率的窗口没法解析。这个没有去细究原因。
    2、同时使用多个软串口
    如果在一段程序中同时使用多个串口,就有一个谁先谁后的问题。Arduino示例代码中给出了同时使用两个软窗口的例子,如下所示,使用某个软串口之前,首先要调用该串口的listen()函数,然后再调用该串口的其它函数,数据处理完之后, 如果还要读取其它串口的数据,则调用其它串口的listen()函数进行切换:

    #include <SoftwareSerial.h>
    // software serial #1: TX = digital pin 10, RX = digital pin 11
    SoftwareSerial portOne(10, 11);

    // software serial #2: TX = digital pin 8, RX = digital pin 9
    // on the Mega, use other pins instead, since 8 and 9 don't work on the Mega
    SoftwareSerial portTwo(8, 9);

    void setup() {
    // Open serial communications and wait for port to open:
    Serial.begin(9600);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
    }


    // Start each software serial port
    portOne.begin(9600);
    portTwo.begin(9600);
    }

    void loop() {
    // By default, the last intialized port is listening.
    // when you want to listen on a port, explicitly select it:
    portOne.listen();
    Serial.println("Data from port one:");
    // while there is data coming in, read it
    // and send to the hardware serial port:
    while (portOne.available() > 0) {
    char inByte = portOne.read();
    Serial.write(inByte);
    }

    // blank line to separate data from the two ports:
    Serial.println();

    // Now listen on the second port
    portTwo.listen();
    // while there is data coming in, read it
    // and send to the hardware serial port:
    Serial.println("Data from port two:");
    while (portTwo.available() > 0) {
    char inByte = portTwo.read();
    Serial.write(inByte);
    }

    // blank line to separate data from the two ports:
    Serial.println();
    }

    3、默认软串口库的不足
    参考文献1中介绍了Arduino默认的软串口库的一些不足,如下所示:
      • 如果有多少软串口,一次只有一个软串口能接收数据;
      • 不是所有Arduino产品的每个引脚都支持Change中断,要看每个Arduino产品具体有哪些引脚支持中断;
    如果需要多个软串口同时处理数据,参考文献1中建议可以使用Paul Stoffregen的AltSoftSerial库。

    参考文献
    [1]http://www.plclive.com/a/tongxinjiekou/2016/0504/500.html
    [2]http://www.carrotech.cn/?p=542
    展开全文
  • esp8266与esp8266之间的软串口通讯 采用node1的硬件串口发给node2的软串口,在通过node2的硬件串口输出接收到node1的信息,相当于node1的信息经过node2的中转再传输给其他接收端。 源代码: #include <...

    esp8266与esp8266之间的软串口通讯

    • 采用node1的硬件串口发给node2的软串口,在通过node2的硬件串口输出接收到node1的信息,相当于node1的信息经过node2的中转再传输给其他接收端。
    • 源代码:
    #include <SoftwareSerial.h>
    SoftwareSerial uart1(14,12);//RX=d5,TX=d6
    String UART_String="";
    void setup() {
      Serial.begin(9600);
        uart1.listen();
      uart1.begin(115200);
    }
    void loop() {
    
      if(uart1.available()>0)
      {
        if(uart1.peek()!='\n')//在收到换行符前软串口接受数据并链接为字符串
        {
          UART_String+=(char)uart1.read();
        }
        else
        {
          uart1.read();
          Serial.print("node2发过来的数据:");
          Serial.println(UART_String);//将软串口2接受的数据打印输出至电脑
          UART_String="";
          while (Serial.read() >= 0) {} //清除串口缓存
        }
      }
    }
    
    
    展开全文
  • 两个arduino进行软串口通信的探索 arduino1程序如下: #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { if ...
  • 软串口1: GPIO14(D5)————RX; GPIO12(D6)————TX; 软串口2: GPIO13(D7)————RX; GPIO15(D8)————TX; 杜邦线连接: D5——D8; D6——D7; 程序代码 基本流程:电脑发送数据——硬...
  • 指引写在前面设备连接部分代码总结 写在前面 这学期跟同学一起计划实现一项小制作,对最主要的LD3320语音识别模块做一个小说明,因为在我们设计的过程中,网上都有很多这种类似的文章,但是跟Arduino交互的好像还...
  • 通过对异步串行传输方式的研究和改进现有的软件模拟串行口方法,在AT89S52上利用并行口P1和定时器T0模拟出两路全双工串行口,并且两路软串口能并行工作。
  • 简要:本文说明Esp8266向Arduino串口通信,Arduino收到乱码的问题!
  • Arduino通过串口将采集的温湿度数据传给掌控板使用Mind+将数据上传至阿里云 在Mind+上使用 Arduino UNO上云的话,需要购买DFRobot的OBLOQ物联网模块,由于手头上没有这款通信模块,所以
  • } } 2、掌控板获取数据并上云 在掌控板这端也同样是使用了软串口进行通信(接收数据),由于掌控板是使用十进制的ASCII码进行通信的,所以掌控板在接收到数据后,要将十进制ASCII码转为相对应的ASCII码字符 这里...
  • 软串口库pigpio可以使用树莓派的所有GPIO针用作串口来通信,且保留树莓派原有通信功能。缺点:只能一个bytes一个bytes读取数据,需要自己拼接数据。 树莓派一共有26根GPIO,所以最多可以做13个串口出来,如果需要多...
  • arduino使用软串口代码

    2016-03-28 17:33:40
    arduino 使用软串口避开默认的和PC电脑arduinoIDE通信的串口。
  • 基于USB的串行通信软硬件设计,分享给初学者
  • Arduino串口通信

    千次阅读 2020-09-25 21:58:54
    文章目录通信类型Arduino串口通信硬串口软串口 通信类型 通信是用来在不同电子设备之间交换数据用的技术,其实就是要实现不同电子设备之间的“通讯对话”。 Arduino串口通信 Arduino采用USART通信模式,可以有硬...
  • PC机与多个单片机之间的串行通信原理及其硬件结构的实现、电子技术,开发板制作交流
  • Arduino软串口调试

    千次阅读 2016-07-27 18:12:58
    关于Arduino,其有一个硬串口可与电脑通信,其他数字输入均可做软串口使用,用于模块通信,下面介绍一下软串口的使用方法。 #include //注意头文件的引入 SoftwareSerial rfid(8, 9);//RX,TX;开软串口 void ...
  • Arduino 串行通信串口通信 UART 原理及释义

    万次阅读 多人点赞 2019-03-28 09:43:53
    本系列中提到的串口通信一般指Arduino上面的USART通信模式,USART也是串行通信的一种,可以有硬串口,软串口两种实现方式,并且USART是一种异步串行通信.   相关案例: 环境监测 温湿度传感器 案例  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,644
精华内容 9,057
关键字:

软串口通信