关于esp8266 for micropython平台下的UART0接口使用
在esp8266下调试pm2.5模块时,由于UART0接口被repl占用,接线后直接死机。查看相关资料后,有一想法:UART0在用串口输出时才占用,如果不在repl模式下调试程序,UART0 是否可用???repl是什么?8266有两个串口的,你和PM2.5的是用哪个串口呢,我之前做的是UART0用作和PM2.5通信,UART1用作LOG没问题。 Jason.zhou 发表于 2017-11-20 13:19
repl是什么?8266有两个串口的,你和PM2.5的是用哪个串口呢,我之前做的是UART0用作和PM2.5通信,UART1用作 ...
UART1 只能发送不能接受,只能使用UART0,而0口被repl(串口调试模式)占用,请问你是怎么做的,能提供思路吗。 youxinweizhi 发表于 2017-11-20 13:28
UART1 只能发送不能接受,只能使用UART0,而0口被repl(串口调试模式)占用,请问你是怎么做的,能提供思 ...
我知道你的意思了,你把调试模式改成UART1呗,有个函数,UART_SetPrintPort(1),可以更改为LOG是从串口1输出 Jason.zhou 发表于 2017-11-20 13:38
我知道你的意思了,你把调试模式改成UART1呗,有个函数,UART_SetPrintPort(1),可以更改为LOG是从串口1输 ...
用的是micropython。有这个函数吗 youxinweizhi 发表于 2017-11-20 13:44
用的是micropython。有这个函数吗
按理应该是有的,你可以看一下接口函数有没有说明,我这个是用的标准C的 <div class='shownolgin' data-isdigest='no'>Jason.zhou 发表于 2017-11-20 13:45
按理应该是有的,你可以看一下接口函数有没有说明,我这个是用的标准C的
谢谢,困扰好几天了。</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <div class='shownolgin' data-isdigest='no'>youxinweizhi 发表于 2017-11-20 13:46
谢谢,困扰好几天了。
客气,你去看看吧。有机会我也去看看micropython的使用:)</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>uart1的确只能发 如果要求不高 可以用软件串口</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>dcexpert 发表于 2017-11-21 08:07
uart1的确只能发 如果要求不高 可以用软件串口
是说其他IO口可模拟串口吗?</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>youxinweizhi 发表于 2017-11-21 13:43
是说其他IO口可模拟串口吗?
是的,可以用任意两个IO模拟。不过mpy中没有直接提供软件串口,需要自己做。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>youxinweizhi 发表于 2017-11-21 13:43
是说其他IO口可模拟串口吗?
以前写的一个简单模拟串口的程序。
import time
import machine
from machine import Pin
class SOFTUART(object):
def __init__(self, tx, rx, baud = 1200):
self.tx = tx
self.rx = rx
self.tx.init(Pin.OUT)
self.rx.init(Pin.IN)
self.baud(baud)
self.timeout = False
def baud(self, baud):
self.bitdelay = 1000000 // baud - 200
def dt(self, dt=''):
if dt=='':
return self.bitdelay
else:
self.bitdelay = dt
def putc(self, dat):
self.tx(0)
time.sleep_us(self.bitdelay)
for i in range(8):
self.tx(dat%2)
dat = dat >> 1
time.sleep_us(self.bitdelay)
self.tx(1)
time.sleep_us(self.bitdelay)
def puts(self, str, cr=1):
for i in range(len(str)):
time.sleep_ms(1)
self.putc(ord(str))
if cr > 0:
time.sleep_ms(1)
self.putc(0x0D)
def put(self, buf):
for i in range(len(buf)):
time.sleep_ms(1)
self.putc(buf)
def timeout(self):
return self.timeout
def getc(self, timeout=20):
t = 0
self.timeout = False
while self.rx():
time.sleep_us(20)
t = t + 1
if t < timeout*5:
pass
else:
self.timeout = True
return -1
time.sleep_us(self.bitdelay + self.bitdelay//8)
dat = 0
for i in range(8):
dat = dat >> 1
if self.rx():
dat = dat | 0x80
time.sleep_us(self.bitdelay)
time.sleep_us(self.bitdelay)
return dat
def get(self, num=0):
dat=bytearray(0)
while True:
t = self.getc()
if self.timeout:
return dat
else:
dat.append(t)
if num > 0:
if num > 1:
num = num - 1
else:
return dat
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>dcexpert 发表于 2017-11-21 14:50
以前写的一个简单模拟串口的程序。
import time
import machine
from mac ...
这是一个示例?还是可以直接用?</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>youxinweizhi 发表于 2017-11-22 14:57
这是一个示例?还是可以直接用?
可以用,可以简单的收发数据,但是比特率不能太高。因为采用延时的方式,效率也比较低。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>dcexpert 发表于 2017-11-22 20:24
可以用,可以简单的收发数据,但是比特率不能太高。因为采用延时的方式,效率也比较低。
请问为什么我的esp8266 用from machine import UART 很多方法都没有 如uart.deinit()、uart.writechar(char)、uart.sendbreak()...?</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>leiyong711 发表于 2017-12-24 11:39
请问为什么我的esp8266 用from machine import UART 很多方法都没有 如uart.deinit()、uart.writechar( ...
ESP8266的串口功能要少一些。一个原因是ESP8266的IO较少,很多功能都是复用的;一个原因是ESP8266和STM32的软件是不同作者,风格上有差异。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>你好,在esp8266上测试了你写的softuart,默认1200波特率的时候工作正常,设成其他就不行了,气体传感器是9600的,感觉硬件本身应该是支持的,但bitdelay要改,而程序里面是写死的,请问有办法解决吗?我在github上搜了,有用c写了直接编译到固件里面去的,貌似能支持9600,还没搭环境试https://github.com/deshipu/micropython/commit/cab6b1c31a0c64331e2b86128b741c77d6529d39</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>你好,在esp8266上测试了你写的softuart,默认1200波特率的时候工作正常,设成其他就不行了,气体传感器是9600的,感觉硬件本身应该是支持的,但bitdelay要改,而程序里面是写死的,请问有办法解决吗?
我在github上搜了,有用c写了直接编译到固件里面去的,貌似能支持9600,还没搭环境试https://github.com/deshipu/micropython/commit/cab6b1c31a0c64331e2b86128b741c77d6529d39
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>baoyingcheng 发表于 2017-12-25 16:18
你好,在esp8266上测试了你写的softuart,默认1200波特率的时候工作正常,设成其他就不行了,气体传感器是9 ...
你的可以了吗?
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'> 本帖最后由 baoyingcheng 于 2017-12-26 02:48 编辑
leiyong711 发表于 2017-12-25 18:05
你的可以了吗?
不行,我又下单买了个esp32s,这个有三个串口,其中一个tty,两个usr,而且不限管脚。
我看淘宝上有一家卖的diy的用的是stm32f103的板子,10块钱左右就能买到,可惜那个只能用C写
版主的软串口bitdelay是用100万除以9600再减200就成负数了。也就是说,基本只能用默认的1200波特率。
而大部分传感器的波特率并不能调,所以就郁闷了。
我在想能不能把那个stm32f103的板子用来转接一下,几个uart接收传感器数据,然后通过其他接口转发给esp8266。
</div><script>showreplylogin();</script>
页:
[1]
2