在线时间776 小时
UID126526
注册时间2008-5-19
NXP金币0
TA的每日心情 | 奋斗 2023-9-17 19:57 |
---|
签到天数: 2310 天 [LV.Master]伴坛终老
金牌会员
- 积分
- 10481
- 最后登录
- 2023-9-17
|
最近事情有些多,不过总算抽出时间,将控制器的程序框架部分实现了。
ESP8266和LPC824之间通过串口通信。因为ESP8266只有一个半串口,串口1连接到repl,不方便直接使用,串口2只有发送没有接收功能,也不方便。所以自己编写了一个软件串口程序,可以指定任意两个GPIO作为串口的TX/RX,实现基本的串口通信功能。考虑到软件串口的稳定性,所以速率不能设置太高,这里设置为1200。
软件串口驱动 softuart.py
- 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[i]))
- 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[i])
- 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
复制代码
LPC824接收到ESP8266发送的命令后,进行分析,然后根据命令执行相应的动作。暂时只写了GPIO的数字输入输出控制,控制命令为:
set n 设置GPIOn输出高电平
clr n 设置GPIOn输出低电平
in n 读取GPIOn电平
[n=0-15]
LPC824的程序有些乱,功能也没有完成,等大部分完成后再整理分享了。
先演示基本功能,因为没有时间做App,先用webrepl代替,通过wifi发送控制命令
先通过webrepl连接到ESP8266
这时LED12不亮
发送命令'set 12',LED12点亮。如果发送'clr 12',LED将熄灭
|
|