ESP32 ARDUINO RS485 DE/RE#流向控制编程
ESP32使用ARDUINO 对RS485 的DE/RE#流向控制
- 概述
- 编程方法
- 方法一
- 方法二
- 总结
概述
原来一直用74HC04配合SP3485做RS485输出模块,对SP3485模块的DE/RE#端不控制。线路图如下:
但这次因为线路板尺寸紧张,并且有多余的点可以控制DE/RE#, 就选择了如下的线路:
现在来说一下编程遇到的困惑和解决问题的思路。
编程方法
方法一
当要向外部输出数据数据时,采用delay(10) 的方式,才能让串口的数据输出到外部接口。
比如我使用了RX2,TX2作为RS485的输出模块。程序应该这样,不然不能输出数据。
if ( Serial.available()){uint8_t x = Serial.read();if ( x == 's' ){char sendBuff[] = "Send message to RS485";digitalWrite(DE_485, HIGH);Serial2.println(sendBuff);delay(10);digitalWrite(DE_485, LOW);Serial.println("Message sneded to RS485");}}
程序说明:如果在digitalWrite(DE_485, HIGH)后不延时10ms的话无法在串口2上输出信息。在程序中添加这个delay(10)后可以正常输出了。还没有试,大量的数据可能要延长这个延时时间。
方法二
采用中断的方式。
中断程序:
void IRAM_ATTR isrDown() // edge falling
{digitalWrite(DE_485, HIGH);
}void IRAM_ATTR isrRDown() // edge riging
{digitalWrite(DE_485, LOW);
}
在setup中将中断程序分配给特定的端子:
attachInterrupt(17, isrDown, FALLING);attachInterrupt(16, isrRDown, RISING);
17是TX2,16是RX2,分别是串口2对应的TX和RX。这时,程序就像RS232或USB普通串口一样发送和接收就可以了。
if ( Serial.available()){uint8_t x = Serial.read();if ( x == 's' ){char sendBuff[] = "Send message to RS485";Serial2.println(sendBuff);Serial.println("Message sneded to RS485");}}
总结
从程序可以看出,Arduino还是有操作系统的特点,在代码上看Serial2.println(sendBuff)在后台是运行的,当我们发送这个指令时,后台按波特率不断的执行,这条语句后面如果直接执行digitalWrite(DE_485, LOW), 会使数据发送不出去。采用中断形式是一种尝试。或许在频繁操作的RS485时会不会健康运行有待于验证,也希望网友提宝贵意见。
使用ESP8266的模块发现Arduino编程时在使用SoftwareSerial库时有:
/// Transmit control pin.void setTransmitEnablePin(int8_t txEnablePin);
可以用这个函数来定义DE485输出点。但在使用过程中发现,当波特率较高时,出错的机率比较高,200ms发送一次,一晚上出现了200多次的收发故障。选用的波特率时57600. 说明在高波特率情况下不稳定。
ESP32 ARDUINO RS485 DE/RE#流向控制编程相关推荐
- ESP32 Arduino Ticker定时库
Ticker是ESP32 arduino的自带库,可以设置以固定时间间隔反复执行某个任务,特别适合以固定频率从传感器收集数据. 计时器本质上是一个计数器.让我们举一个简单的例子.如果给你一个可以从0到 ...
- ESP32作为服务器,使用网页控制LED小灯
ESP32作为服务器,使用网页控制LED小灯 项目描述 ESP32-S开发板加入局域网,使用platformIO编写好ESP32的代码后,编译下载到ESP32中,访问ESP32的IP地址,使用网页控制 ...
- ESP32+arduino智能浇水系统
一.ESP32+arduino智能浇水系统 随着人类居住条件的改善及对生态生活环境的关注,花卉养殖得到社会和人类个体的重视.这些具有生命特征的植物需 要科学合理的人工照顾.本研究提出了利用ESP WR ...
- Microsoft微软公司硬件控制编程技术介绍
我是荔园微风,作为一名在IT界整整25年的老兵,最近遇到一个技术问题,就是公司同事问我,有没有什么好的硬件控制编程技术可以选,我说有啊,很多啊,比如linux嵌入式编程啊,比如纯粹的单片机C编程啦,再 ...
- 交叉路口红绿灯控制程序linux,PLC十字路口的交通灯控制编程实例!
原标题:PLC十字路口的交通灯控制编程实例! 1. 控制要求 十字路口交通灯的运行如下图所示.当起动开关接通时,信号灯系统开始工作,且先南北红灯亮,东西绿灯亮.当起动开关断开时,所有的信号灯全部熄灭. ...
- 利用blinker,让arduino实现多路继电器状态控制和APP端状态反馈
利用blinker,让arduino实现多路继电器状态控制和APP端状态反馈 有需要的朋友可以直接拷贝代码拿来使用,按钮是自锁按钮控制的,不是点动开关型的.这是经过许多人的经验总结和奉献才调通的程序, ...
- 免费领,自动化控制编程入门到开挂学习路径(附教程和软件工具)
大家好,我是华山自控编程的朱老师,很多同学都在讨论上位机运动控制卡与机器视觉编程的问题,今天写了干货,希望可以帮助到你们! 一.入门上位机编程的疑问解答 1.自动化控制编程分哪几个方向? 答:自动化控 ...
- Arduino 好盈电调基本控制(PWM)
Arduino 好盈电调 基本控制(PWM) 新手小白,寻找多个文档以及示例代码,都七七八八:最后碰见一个大致好使的,修改之后放上来 注意:在做测试的时候不要安装螺旋桨,否则会很危险!!! int P ...
- 【基于Arduino APDS9960 传感器的手势控制非接触式电梯】
基于Arduino APDS9960 传感器的手势控制非接触式电梯 前言 所需组件 APDS9960 RGB & 手势传感器 电路原理图 代码说明 测试手势控制的非接触式升降机 完整代码 前言 ...
最新文章
- 注意!Linux glibc再曝漏洞,可导致Linux软件劫持
- 200813_C指针
- java 程序分析题_java程序入门50题分析:002
- 再试译ScottGu's Posts 之 VS2008之语言特性--查询语法--New Orcas Language Feature: Query Syntax...
- [蓝桥杯][算法训练VIP]乘积最大(动态规划)
- 一个有趣的问题,讨论讨论
- nginx配置前端反向代理
- mybatis_user_guide(4) Mapper XML 文件
- javafx2_JavaFX 2 GameTutorial第1部分
- Vista系统自带IIS 7.0设置技巧详解
- brew 安装软件能指定文件夹吗_Mac下Homebrew安装的软件放在什么地方
- 美团 | 搜索多业务商品排序探索与实践
- NYOJ.904 search(二分查找,快速排序,结构体运用)
- 秒杀各大网盘的不限速大文件传输工具
- opencv-------高斯滤波
- java爬取今日头条文章
- 轻量级工具emoji-java处理emoji表情字符
- 解决网易mumu启动失败问题
- html 增加选项,添加标签——给定标签选项
- java jni udt找不到so_移植UDT到Android平台