youxinweizhi 发表于 2017-11-20 10:11

关于esp8266 for micropython平台下的UART0接口使用

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

Jason.zhou 发表于 2017-11-20 13:19

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

youxinweizhi 发表于 2017-11-20 13:28

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

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

Jason.zhou 发表于 2017-11-20 13:38

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

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

youxinweizhi 发表于 2017-11-20 13:44

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

用的是micropython。有这个函数吗

Jason.zhou 发表于 2017-11-20 13:45

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

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

youxinweizhi 发表于 2017-11-20 13:46

<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>

Jason.zhou 发表于 2017-11-20 13:51

<div class='shownolgin' data-isdigest='no'>youxinweizhi 发表于 2017-11-20 13:46
谢谢,困扰好几天了。

客气,你去看看吧。有机会我也去看看micropython的使用:)</div><script>showreplylogin();</script>

dcexpert 发表于 2017-11-21 08:07

<div class='shownolgin' data-isdigest='no'>uart1的确只能发 如果要求不高 可以用软件串口</div><script>showreplylogin();</script>

youxinweizhi 发表于 2017-11-21 13:43

<div class='shownolgin' data-isdigest='no'>dcexpert 发表于 2017-11-21 08:07
uart1的确只能发 如果要求不高 可以用软件串口

是说其他IO口可模拟串口吗?</div><script>showreplylogin();</script>

dcexpert 发表于 2017-11-21 14:49

<div class='shownolgin' data-isdigest='no'>youxinweizhi 发表于 2017-11-21 13:43
是说其他IO口可模拟串口吗?

是的,可以用任意两个IO模拟。不过mpy中没有直接提供软件串口,需要自己做。</div><script>showreplylogin();</script>

dcexpert 发表于 2017-11-21 14:50

<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>

youxinweizhi 发表于 2017-11-22 14:57

<div class='shownolgin' data-isdigest='no'>dcexpert 发表于 2017-11-21 14:50
以前写的一个简单模拟串口的程序。

import time
import machine
from mac ...

这是一个示例?还是可以直接用?</div><script>showreplylogin();</script>

dcexpert 发表于 2017-11-22 20:24

<div class='shownolgin' data-isdigest='no'>youxinweizhi 发表于 2017-11-22 14:57
这是一个示例?还是可以直接用?

可以用,可以简单的收发数据,但是比特率不能太高。因为采用延时的方式,效率也比较低。</div><script>showreplylogin();</script>

leiyong711 发表于 2017-12-24 11:39

<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>

dcexpert 发表于 2017-12-24 18:22

<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>

baoyingcheng 发表于 2017-12-25 15:39

<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>

baoyingcheng 发表于 2017-12-25 16:18

<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>

leiyong711 发表于 2017-12-25 18:05

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

你的可以了吗?
</div><script>showreplylogin();</script>

baoyingcheng 发表于 2017-12-26 02:45

<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
查看完整版本: 关于esp8266 for micropython平台下的UART0接口使用