9983|27

96

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于esp8266 for micropython平台下的UART0接口使用 [复制链接]

 
         在esp8266下调试pm2.5模块时,由于UART0接口被repl占用,接线后直接死机。查看相关资料后,有一想法:UART0在用串口输出时才占用,如果不在repl模式下调试程序,UART0 是否可用???

最新回复

我就是来向大牛学习的! 2017的帖子啊,解决问题思路值得学习!   详情 回复 发表于 2024-4-3 10:08
点赞 关注
 
 

回复
举报

8

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
repl是什么?8266有两个串口的,你和PM2.5的是用哪个串口呢,我之前做的是UART0用作和PM2.5通信,UART1用作LOG没问题。

点评

UART1 只能发送不能接受,只能使用UART0,而0口被repl(串口调试模式)占用,请问你是怎么做的,能提供思路吗。  详情 回复 发表于 2017-11-20 13:28
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
Jason.zhou 发表于 2017-11-20 13:19
repl是什么?8266有两个串口的,你和PM2.5的是用哪个串口呢,我之前做的是UART0用作和PM2.5通信,UART1用作 ...

UART1 只能发送不能接受,只能使用UART0,而0口被repl(串口调试模式)占用,请问你是怎么做的,能提供思路吗。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

4
 
youxinweizhi 发表于 2017-11-20 13:28
UART1 只能发送不能接受,只能使用UART0,而0口被repl(串口调试模式)占用,请问你是怎么做的,能提供思 ...

我知道你的意思了,你把调试模式改成UART1呗,有个函数,UART_SetPrintPort(1),可以更改为LOG是从串口1输出

点评

用的是micropython。有这个函数吗  详情 回复 发表于 2017-11-20 13:44
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

5
 
Jason.zhou 发表于 2017-11-20 13:38
我知道你的意思了,你把调试模式改成UART1呗,有个函数,UART_SetPrintPort(1),可以更改为LOG是从串口1输 ...

用的是micropython。有这个函数吗
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

6
 
youxinweizhi 发表于 2017-11-20 13:44
用的是micropython。有这个函数吗

按理应该是有的,你可以看一下接口函数有没有说明,我这个是用的标准C的

点评

谢谢,困扰好几天了。  详情 回复 发表于 2017-11-20 13:46
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

7
 
Jason.zhou 发表于 2017-11-20 13:45
按理应该是有的,你可以看一下接口函数有没有说明,我这个是用的标准C的

谢谢,困扰好几天了。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

8
 
youxinweizhi 发表于 2017-11-20 13:46
谢谢,困扰好几天了。

客气,你去看看吧。有机会我也去看看micropython的使用
 
 
 

回复

1万

帖子

24

TA的资源

版主

9
 
uart1的确只能发 如果要求不高 可以用软件串口

点评

是说其他IO口可模拟串口吗?  详情 回复 发表于 2017-11-21 13:43
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

10
 
dcexpert 发表于 2017-11-21 08:07
uart1的确只能发 如果要求不高 可以用软件串口

是说其他IO口可模拟串口吗?

点评

以前写的一个简单模拟串口的程序。 [mw_shl_code=python,true]import time import machine from machine import Pin class SOFTUART(object): def __init__(self, tx, rx, baud = 1200): self  详情 回复 发表于 2017-11-21 14:50
是的,可以用任意两个IO模拟。不过mpy中没有直接提供软件串口,需要自己做。  详情 回复 发表于 2017-11-21 14:49
 
 
 

回复

1万

帖子

24

TA的资源

版主

11
 
youxinweizhi 发表于 2017-11-21 13:43
是说其他IO口可模拟串口吗?

是的,可以用任意两个IO模拟。不过mpy中没有直接提供软件串口,需要自己做。
 
 
 

回复

1万

帖子

24

TA的资源

版主

12
 
youxinweizhi 发表于 2017-11-21 13:43
是说其他IO口可模拟串口吗?

以前写的一个简单模拟串口的程序。

  1. import time
  2. import machine
  3. from machine import Pin

  4. class SOFTUART(object):
  5.     def __init__(self, tx, rx, baud = 1200):
  6.         self.tx = tx
  7.         self.rx = rx
  8.         self.tx.init(Pin.OUT)
  9.         self.rx.init(Pin.IN)
  10.         self.baud(baud)
  11.         self.timeout = False

  12.     def baud(self, baud):
  13.         self.bitdelay = 1000000 // baud - 200

  14.     def dt(self, dt=''):
  15.         if dt=='':
  16.             return self.bitdelay
  17.         else:
  18.             self.bitdelay = dt

  19.     def putc(self, dat):
  20.         self.tx(0)
  21.         time.sleep_us(self.bitdelay)
  22.         for i in range(8):
  23.             self.tx(dat%2)
  24.             dat = dat >> 1
  25.             time.sleep_us(self.bitdelay)
  26.         self.tx(1)
  27.         time.sleep_us(self.bitdelay)

  28.     def puts(self, str, cr=1):
  29.         for i in range(len(str)):
  30.             time.sleep_ms(1)
  31.             self.putc(ord(str[i]))
  32.         if cr > 0:
  33.             time.sleep_ms(1)
  34.             self.putc(0x0D)

  35.     def put(self, buf):
  36.         for i in range(len(buf)):
  37.             time.sleep_ms(1)
  38.             self.putc(buf[i])

  39.     def timeout(self):
  40.         return self.timeout

  41.     def getc(self, timeout=20):
  42.         t = 0
  43.         self.timeout = False
  44.         while self.rx():
  45.             time.sleep_us(20)
  46.             t = t + 1
  47.             if t < timeout*5:
  48.                 pass
  49.             else:
  50.                 self.timeout = True
  51.                 return -1
  52.         time.sleep_us(self.bitdelay + self.bitdelay//8)
  53.         dat = 0
  54.         for i in range(8):
  55.             dat = dat >> 1
  56.             if self.rx():
  57.                 dat = dat | 0x80
  58.             time.sleep_us(self.bitdelay)
  59.         time.sleep_us(self.bitdelay)
  60.         return dat

  61.     def get(self, num=0):
  62.         dat=bytearray(0)
  63.         while True:
  64.             t = self.getc()
  65.             if self.timeout:
  66.                 return dat
  67.             else:
  68.                 dat.append(t)
  69.             if num > 0:
  70.                 if num > 1:
  71.                     num = num - 1
  72.                 else:
  73.                     return dat

复制代码

点评

这是一个示例?还是可以直接用?  详情 回复 发表于 2017-11-22 14:57
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

13
 
dcexpert 发表于 2017-11-21 14:50
以前写的一个简单模拟串口的程序。

[code]import time
import machine
from mac ...

这是一个示例?还是可以直接用?

点评

可以用,可以简单的收发数据,但是比特率不能太高。因为采用延时的方式,效率也比较低。  详情 回复 发表于 2017-11-22 20:24
 
 
 

回复

1万

帖子

24

TA的资源

版主

14
 
youxinweizhi 发表于 2017-11-22 14:57
这是一个示例?还是可以直接用?

可以用,可以简单的收发数据,但是比特率不能太高。因为采用延时的方式,效率也比较低。
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(初级)

15
 
dcexpert 发表于 2017-11-22 20:24
可以用,可以简单的收发数据,但是比特率不能太高。因为采用延时的方式,效率也比较低。

请问为什么我的esp8266 用from machine import UART   很多方法都没有 如uart.deinit()、uart.writechar(char)、uart.sendbreak()...?

点评

ESP8266的串口功能要少一些。一个原因是ESP8266的IO较少,很多功能都是复用的;一个原因是ESP8266和STM32的软件是不同作者,风格上有差异。  详情 回复 发表于 2017-12-24 18:22
 
 
 

回复

1万

帖子

24

TA的资源

版主

16
 
leiyong711 发表于 2017-12-24 11:39
请问为什么我的esp8266 用from machine import UART   很多方法都没有 如uart.deinit()、uart.writechar( ...

ESP8266的串口功能要少一些。一个原因是ESP8266的IO较少,很多功能都是复用的;一个原因是ESP8266和STM32的软件是不同作者,风格上有差异。
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

17
 
你好,在esp8266上测试了你写的softuart,默认1200波特率的时候工作正常,设成其他就不行了,气体传感器是9600的,感觉硬件本身应该是支持的,但bitdelay要改,而程序里面是写死的,请问有办法解决吗?我在github上搜了,有用c写了直接编译到固件里面去的,貌似能支持9600,还没搭环境试
链接已隐藏,如需查看请登录或者注册
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

18
 
你好,在esp8266上测试了你写的softuart,默认1200波特率的时候工作正常,设成其他就不行了,气体传感器是9600的,感觉硬件本身应该是支持的,但bitdelay要改,而程序里面是写死的,请问有办法解决吗?
我在github上搜了,有用c写了直接编译到固件里面去的,貌似能支持9600,还没搭环境试
链接已隐藏,如需查看请登录或者注册

 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(初级)

19
 
baoyingcheng 发表于 2017-12-25 16:18
你好,在esp8266上测试了你写的softuart,默认1200波特率的时候工作正常,设成其他就不行了,气体传感器是9 ...

你的可以了吗?
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

20
 
本帖最后由 baoyingcheng 于 2017-12-26 02:48 编辑

不行,我又下单买了个esp32s,这个有三个串口,其中一个tty,两个usr,而且不限管脚。
我看淘宝上有一家卖的diy的用的是stm32f103的板子,10块钱左右就能买到,可惜那个只能用C写
版主的软串口bitdelay是用100万除以9600再减200就成负数了。也就是说,基本只能用默认的1200波特率。
而大部分传感器的波特率并不能调,所以就郁闷了。

我在想能不能把那个stm32f103的板子用来转接一下,几个uart接收传感器数据,然后通过其他接口转发给esp8266。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表