首页 > 其他分享 >ESP32平台关于RS485分时双向通信的总结

ESP32平台关于RS485分时双向通信的总结

时间:2023-12-21 18:33:48浏览次数:40  
标签:Serial1 函数 双向通信 RS485 串口 Serial ESP32

ESP32平台关于RS485分时双向通信的一些总结

介绍

  1. ESP32在Arduino环境下收发数据有两个关键函数,一个是Serial.available(),用于检测当前串口的缓存中有无数据,另外一个是Serial.onReceive(onSerialReceive, true);,通过类似于中断的方式,接收数据帧,参数onSerialReceive为接收数据函数,函数中还需要检测当前串口缓存中是否有数据。
  2. 之前的项目中,在ESP32平台上使用RS485总线,数据流方向控制使用指定IO进行控制,需要在程序中添加短暂延时函数,用以保证收发数据完整,但在最近的项目中发现,ESP32在Arduino的库函数中,具备RS485的流控功能。

实现方法:

  1. 以下代码为通过onReceive函数,实现读取串口数据代码:
    setup函数中添加以下代码:
Serial.begin(115200);
Serial.onReceive(onSerialReceive, true);
对函数onSerialReceive的声明:
void onSerialReceive()
{
  if (Serial.available())
  {
    Serial.read(serialbuf, Serial.available()); //read data from serial buffer to data array - serialbuf
  }
}
  1. 以下代码将ESP32的Serial1作为RS485总线的收发串口,则通过Serial1.begin(115200)初始化串口1,通过setPins函数,将串口的rtsPin设置为RS485流控接口,对应的库函数为bool HardwareSerial::setPins(int8_t rxPin, int8_t txPin, int8_t ctsPin, int8_t rtsPin)
    经过以上配置,Serial1接口即可设置为接收RS485总线数据,并通过指定的IO口对数据流方向进行控制。之后,通过配置串口工作模式Serial1.setMode(0X01);,将串口的工作模式配置为UART_MODE_RS485_HALF_DUPLEX,设置串口onReceive函数,并打开此功能,即可实现RS485的双向自动收发。
Serial1.begin(115200);
Serial1.setPins(RS485_RX, RS485_TX, -1, RS485_RTS);
Serial1.setMode(0X01); //UART_MODE_RS485_HALF_DUPLEX
Serial1.setTimeout(5);
Serial1.onReceive(on485Receive, true);
    

总结

以上两种方法的配合使用,提高了ESP32接收RS485总线数据的效率。
在使用中,如接收RS485总线数据帧,可参考博文:ESP32在Arduino环境下的串口数据帧接收

标签:Serial1,函数,双向通信,RS485,串口,Serial,ESP32
From: https://www.cnblogs.com/Mech-Snake/p/17919840.html

相关文章

  • ESP32在Arduino环境下使用QUEUE接收串口数据帧
    ESP32在Arduino环境下的串口数据帧接收测试平台ESP32-WROOM测试语言Arduino@PlatformIO注意事项需要添加Queue的库函数作者:SMFSWPlatformIO环境配置文件-platformio.ini[env:esp32doit-devkit-v1]platform=espressif32board=esp32doit-devkit-v1framewo......
  • Mac Arduino ESP8266 ESP32 搭建开发环境
    目录1、安装Arduino2、搭建开发板管理器3、可能出现的错误 1、安装ArduinoArduino下载. 官方下载地址:Arduino官方网站Arduino中文社区:下载地址安装方式:解压后无需安装,拖到应用程序(AppLication)里面就行了2、搭建开发板管理器 打开Ardu......
  • 使用JS和SignalR完成双向通信
    写在前面:看官网介绍,听开发者朋友的感受,SignalR对websocket等多个长连接协议进行了封装,提供了多种方法,能够适应很多场合和复杂情况。单纯论简单的web长连接,它确实没有js/nodejs版的websocket直观、简单。微软的风格,一来就高大上,不知道又会劝退多少人,会不会把自己玩死。我帮你简单......
  • TTL、RS232、RS485、RS422
    TTL、RS-232、RS-485是指的电平标准(电信号)。TTL:全双工 ,逻辑0对应0V,逻辑1对应3.3V或者5V。RS232:全双工,逻辑0对应+3V至+15V,逻辑1对应-15V至-3V。工业控制RS-232口一般只使用RXD、TXD、GND三条线。RS232的逻辑电平和TTL不一样但是协议是一样的。通讯距离15m。RS485:半双工,逻......
  • ESP32的SPI外设(SPI HSPI VSPI)
    ESP32的SPI外设(SPIHSPIVSPI)ESP32SPI简介参考文档:ESP32技术参考手册ESP32的SPI一共有4个,分别为SPI0、SPI1、SPI2、SPI3。如下图所示:其中SPI0和SPI1通过一个仲裁器共用一组信号总线,这组信号总线前缀带有SPI,主要用于访问外部存储单元和DMA操作。所以SPI信号总线不是提供给......
  • 在Arduino环境下对ESP32进行寄存器操作和区别比较
    在Arduino环境下对ESP32进行寄存器操作和区别比较前言这篇文章主要是对在Arduino环境下如何对ESP32进行寄存器操作进行了相关的说明。并且比较了在不同编程方式下GPIO口的电平翻转速度,这可以更加直观的不同编程方式下的代码运行效率。(平台是VScode,使用Platformio下的Arduino固......
  • ESP32CAM介绍
    ESP32-CAM是安信可最新发布小尺寸的摄像头模组。该模块可以作为最小系统独立工作,尺寸仅为27*40.5*4.5mm,深度睡眠电流最低达到6mA。 ESP32-CAM可广泛应用于各种物联网场合,适用于家庭智能设备、工业无线控制、无线监控、QR无线识别,无线定位系统信号以及其它物联网应用,是物联网应......
  • ESP32简单实现新版HC-SR04超声波模块(MicroPython+Thonny)
    一、新版HC-SR04简介新版HC-SR04,性能远超老版HC-SR04,US-015;在测距精度高于老版HC-SR04和US-015的情况下,测距范围更远,可达6米,远超一般超声波测距模块。采用CS-100A超声波测距SOC芯片,高性能,工业级,宽电压、低价格,成本击穿底价,只有普通超声波测距模块一半的价格,而性能远超普通超声波......
  • 了解 ESP32 FreeRTOS:初学者指南
    原文:https://www.cnblogs.com/intomcu/p/17297020.html了解ESP32FreeRTOS:初学者指南ESP32FreeRTOS是什么?如何使用FreeRTOS?哪些常用的函数?xTaskCreate()vTaskDelete()vTaskDelay()xTicksToDelay()xSemaphoreCreateBinary()xSemaphoreGive()xSemaphore:要释放的信......
  • HAL_RS485发送接收_DMA:编码器
    RS485编码器使用RS485读取多个编码器接收数据:空闲中断+DMA发送数据:DMA配置串口:基本与串口通信一致,增加接收和发送DMA,正常模式,另外增加485使能IO      接收数据:使能空闲中断        __HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE);        _......