精华内容
下载资源
问答
  • 简要:本文说明Esp8266向Arduino串口通信,Arduino收到乱码的问题!

    Esp8266向Arduino软串口通信,Arduino收到乱码的问题!

    简要:本文说明Esp8266向Arduino软串口通信,Arduino收到乱码的问题!

    最近小编在做一个用arduino UNOesp8266开发板的项目,在过程中遇到了一个问题:esp8266如何和arduino通信?为什么arduino收到的都是乱码?现在网上有很多解决arduino读取esp8266的串口信息,今天小编就来为大家解决这个问题。

    例子:Esp8266串口通信输出“1”,Arduino收到什么信息?

    代码:

    Arduino Uno:

    #include <SoftwareSerial.h>
    
    SoftwareSerial arduinoSerial = SoftwareSerial(0,1);
    
    void setup() {
      // put your setup code here, to run once:
       Serial.begin(9600);
       arduinoSerial.begin(9600);
       arduinoSerial.flush();
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
        char a;
        a=arduinoSerial.read();
        Serial.println(a);
    }
    

    ESP8266:

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      Serial.write("1");
    }
    

    这是就有人问了,我收到的都是乱码啊。。。。?我收到的不是我想要的啊?

    此时esp8266输出的情况是这样的!

    再次我们
    这里我们使用的是安信可串口调试助手

    而Arduino收到的消息是这样的!
    在这里插入图片描述
    这时我们如何解决这个问题呢?此时我是这么接的线!

    在这里插入图片描述
    测试时,我的两个模块都是使用USB转TTL供电的,当我们把esp8266用电池供电就解决了这个问题了,在这里我是将arduino上的3v3接到了esp8266的3v管脚上arduino为esp8266供电
    Arduino串口通信收到的数据
    上图片!Arduino串口通信收到的数据👆👆👆

    现在就正常了!

    如果有错误,还请各位大佬批评指正!

    愿大家在单片机的学习之路一路顺风ヾ(◍°∇°◍)ノ゙

    展开全文
  • Arduino来实现一些小设计感觉会比51或者stm32都简单很多,Arduino集成了很多库文件,同时IDE里面还有很多人弄的开源的库文件,对于新手来说是一个不错的练习平台。
  • arduino实现软串口通信

    万次阅读 多人点赞 2019-06-28 12:11:31
    最近不忙,闲来总结一下arduino板之间是如何通过软串口实现通信的。在之前不懂的情况下也做过类似的查阅文档和网上研究,基本靠拿来主义得到的都是硬串口软串口之间通信,要么就是简单介绍软串口通信的基础知识,...
    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软串口通信,发现官方库软串口只能设置波特率,我想要设置其他的参数,有没有实例给推一个。
  • Arduino软串口调试

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

        关于Arduino,其有一个硬串口可与电脑通信,其他数字输入均可做软串口使用,用于模块通信,下面介绍一下软串口的使用方法。

    #include <SoftwareSerial.h>//注意头文件的引入
     
    SoftwareSerial rfid(8, 9);//RX,TX;开软串口
     
    void setup() {
      Serial.begin(9600);//开硬串口,用于电脑端测试数据
      while (!Serial) {;}
      Serial.println("Goodnight moon!");
      rfid.begin(9600);
    }
     
    void loop() { 
      rfid.listen();
      if (rfid.available()) {
        String str = readLine();
        Serial.println(str);//检测软串口输入的内容
      }
    }
    
    String readLine()//由于.read()函数每次读取一个字节,所以写了这个函数读取多位
    {
        String str;
        int i = 0;
        while (rfid.available())
        {
            if (i<13)//这里我是获取rfid模块的卡号,共13位,所以设为i<13
            {
              str += char(rfid.read());
              i++;
              delay(2);
            }
            else break;
        }
        return str;
    }


    展开全文
  • 遇到需要2个软串口的情况,其中一个串口失效了,获取不到数据。切换监听也写了,还是没有用。 硬件电路没有问题,换了另一个只用了一个接口的代码后可执行。 新人学习中,求大神指导,我是不是遗漏了什么。 ``` ...
  • 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
    展开全文
  • 关于Arduino串口通信

    2020-10-15 15:55:22
    关于Arduino串口通信一、启动串行连接二、写数据三、读数据 在Arduino中,想要使用串口,必须用Serial类函数 一、启动串行连接 串口设置在setup()函数中完成 void setup() { Serial.begin(9600); /*打开串口...
  • arduino使用软串口代码

    2016-03-28 17:33:40
    arduino 使用软串口避开默认的和PC电脑arduinoIDE通信串口
  • Arduino和Xbee软串口通信

    千次阅读 2019-01-11 23:10:01
    Arduino Uno只有一个硬件口,在与蓝牙,无线通信的时候我们需要另外设置一个软串口才能实现。 Arduino 官方提供了软件串口的库,可以将任意两个数字端口,模拟成串口。软件串口库不需要下载,IDE 已经集成,打开...
  • 但首先我想要在串口/ USB上进行实时通信 .因此,arduino代码正在等待来自matlab的调用,并且根据调用的类型,答案将被转发到电机(控制命令)或编码器值将被发送到笔记本电脑(读取命令) .在matlab部分,我使用了串行...
  • 两个arduino进行软串口通信的探索 arduino1程序如下: #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { if ...
  • 前言因为Arduino具有丰富的外部接口,也拥有比较多可以直接使用的传感器,可以比较方便的获取大量环境数据,例如温度、湿度、声、光等。但这就有个问题,我要如何将arduino获取到的数据发送给树莓派进行进一步的处理...
  • 利用ARDUINO单片机和设备串口通信,采集数据,数据处理,并利用MODBUS协议传之网络,该例子为实例,可以照此实例改写自己的程序,快捷方便。
  • 安装serial,用于串口通信 sudo apt-get install python-serial 将Arduino用USB线连接到树莓派的USB,在树莓派中输入(注意ls后有一个空格) Ls /dev/tty* 查看两者连接端口的名字。查看是否出现ttyACM0或ttyUSB...
  • Arduino - 串口操作函数与示例代码大全

    万次阅读 多人点赞 2015-12-16 22:36:02
    本文总结了Arduino常用串口操作函数的说明、语法、参数、返回值。根据函数定义编写了示例代码,并通过实验解释了每个函数的具体用法。是对Arduino串口操作函数的较全面总结,可作为工具贴查找使用。
  • Arduino串口通信

    千次阅读 2020-09-25 21:58:54
    文章目录通信类型Arduino串口通信硬串口串口 通信类型 通信是用来在不同电子设备之间交换数据用的技术,其实就是要实现不同电子设备之间的“通讯对话”。 Arduino串口通信 Arduino采用USART通信模式,可以有硬...
  • Arduino-串口通信

    2016-04-03 21:30:00
    Arduino与计算机通信所使用的USB接口就是下载程序时所用的USB接口,当Arduino与其他设备通信时,需要用到“Serial”系列函数,所以我们要对其有所了解,下面介绍几个常“Serial”函数。 1、Serial.begin()—设置...
  • 树莓派与Arduino串口通信

    千次阅读 2015-02-06 15:05:55
    树莓派B+拥有4个USB口,而Arduino正好有USB转串口,这样我们就能够很容易的利用这一对接口来实现树莓派与Arduino之间的串口通信arduino端的程序: String recv=""; int led=3; void setup() { pinMode(led,...
  • 写这篇文章是因为我发现Arduino的串口通讯相关的文章对很多小白不太友好,我这篇文章是我自己实践过后得出的简单易懂的教程,之后会继续推出Arduino串口通讯控制外设的文章! 启动串口通讯 Serial.begin() 描述: ...
  • arduino串口通信

    2013-01-16 16:31:41
    Arduino串行通信 刚开始看到引脚读写函数的时候觉得很鸡肋 还不如以前端口直接赋值简单 但是继续往下看 Arduino 提 供的通讯函数就发现不错
  • 本文将展示如何通过COM(UART)端口在Arduino和Visual Studio之间进行通信
  • STM32-Arduino编程 串口通信环境说明使用Arduino开发STM32原因直接开始操作 环境说明 开发软件:vscode+PlatformIO 操作系统:win10 开发板:STM32F103C8T6 其他硬件:USB转TTL模块(需要安装对应驱动) 使用Arduino...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,377
精华内容 2,550
关键字:

arduino软串口通信