MicroPython+ESP8266:UART串口通信

MicroPython+ESP8266:UART串口通信,第1张

软件准备:

NodeMCU v2提供三个UART。您可以在TXD0,RXD0,TXD1,TXD2,RXD2上看到它们:

我们可以使用UART库访问UART串口

在本章中,我使用Arduino板作为UART源。我们从UART读取传入的消息。开始吧!

在串口通信的教程中,我使用Arduino Uno连接到NodeMCU板。我们在连接到Arduino板的NodeMCU上使用UART0。我们应该将RX引脚连接到TX引脚,将TX引脚连接到RX引脚。

以下是我们的连线方式:

我的接线实现如下图所示:

首仿闹汪先,我们使用Arduino IDE为Arduino UNO编写程序。我们使用SoftwareSerial模拟软串口10和11.该程序将等待输入的UART数据,然后在0和1引脚上发送到Arduino UART。接下来开始写这个程序:

Arduino程序:

保存这个程序。然后,将其上传到Arduino板。在上传之前,请确保Arduino UART(数字0,1,10和11引脚)不能连接到任何电路或传感器。下一步备仔是为NodeMCU板编写程序。创建一个名为uartdemo.py的文件。开始编写程序:

Nodemcu程序:

现在您可以通过WebREPL上传和运行MicroPython程序。完成弯凯后,将NodeMCU UART连接到Arduino UART(数字引脚:10和11)。要查看UART输出,请从Arduino IDE打开串行监视器工具。设置波特9600.您应该看到UART输出:

以下是WebREPL上的程序输出:

最近有项目需要实现windows机器和Android开发版进行UART串口通信,经过3天查找尝乱哪试,特记录一下最终方案,希望之后的同行少走弯路,最后在git上回开源哗悉码我最终的方案希望大家支持。

Android 3.0.1

Gradle 4.1

ARM开发版 : RK3399

PC机器:Win10

开发机器:MAC 10.13.3

先上图

由于 android-serialport-api 项目中的so使用较old的ndk编译,所以在对于Android 6.0 以上版本兼容的时候会报错 dlopen failed: "has text relocations" 。且使用的mk进行编译,特升级为用cmake编译。

升级 android-serialport-api

项目结构:

app对应原项目中的各个Activity, androidserial 是module 对应编译之前的so,还有API的封装。可以直接引用androidserial,调用方法参考app目录下的activity。

注意 关于权限!

当接入开发板后如果发现 Error You do not have read/write permission to the serial port 需要root 权限 ,在开发者模式中开启root 权限 adb和应用

使用一下命令开启Android对串口的读写权限

setenforce 0 : 关闭防火墙,有人说关键是这,但是我的环境不用关闭,只要给权限就可以

注意 关于ttyS1 - 6 ttyS1 - 6 对应的是 UART 串口1-6 一般都是一一对应的。这个具体要看一下开发板的说明。

记录的比较糙,还请见谅,如有问题陆档请留言,我看到后肯定回复。项目主要看结构,剩下的都是复制黏贴的事。 git地址:https://github.com/braincs/AndroidSerialLibrary

//摘要: 掌握 UART0配置及使用,程序中将UART0 配置到P0.0、 P0.1。利中岁用串口调试助手,波特率设置为4800,并选择十六进制发送和显示,十六进制发送为偶数个,不然会少返回一个数,详见程序注释。

#include "c8051f020.h"

unsigned char data1

void SYSCLK_Init()

void PORT_Init()

void UART0_Init()

void SYSCLK_Init()

{

unsigned int i

OSCXCN=0X67//0X67=0110,0111

for(i=0i<256i++)//等待>1ms

while(!(OSCXCN&0X80)) //等待XTLVLD变为1

OSCICN=0X88//时钟失效监测器,选择外部时钟源作为系统时钟

}

void PORT_Init()

{

XBR0 = 0x27/*交叉开关配置,URAT总线TX0置到P0.0口,RX0置到P0.1口, SPI总线SCK配置到P0.2口,

MOSI为P0.4口卖袜睁, NSS为P0.5,MISO配置到P0.3口,IIC总线SDA置到P0.6口�SCK置到P0.7 TX1,RX1配置到P1.0,P1.1,CEX0,CEX1,配置到P1.2,P1.3,外部中断int0配置到P1.4 */

XBR1 = 0x04

XBR2 = 0x44 /*允许功能选择开关有效*/

P0MDOUT = 0x1A/*SCK、MOSI和NSS为推拉式输出,MISO为开漏式.*/

P74OUT =0xff

}

void UART0_Init()

{

SCON0=0x50 //串口方式1

TMOD=0X20//选用定时器1作为波特率发好桥生器

TH1=0xF4 //波特率为4800

TL1=0xF4

ES0=1 //开启串口中断0

TF1=0

TR1=1 //定时器启动

PCON=0X80//波特率加倍 波特率为9600

TI0=1

}

void UART0_ISR() interrupt 4 using 1

{

if(RI0)

{

RI0=0//中断接收标志清零

data1=SBUF0//接收数据

SBUF0=data1//发送数据

while(TI0==0)

TI0=0//发送标志清零

}

}

main()

{

WDTCN=0XDE

WDTCN=0XAD

SYSCLK_Init()

PORT_Init()

UART0_Init()

EA=1

while(1)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12345943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存