diff --git a/ATGM336H_5N_/README.md b/ATGM336H_5N_/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c4a794e30faa0c505d68e0c911cced8d1c623c19 --- /dev/null +++ b/ATGM336H_5N_/README.md @@ -0,0 +1,65 @@ +# GPS模块 + +## 案例展示 + +如果在室内没有接受到信号时: + +20210722095440 + +在室外接收到信号时: + +20210722095432 + + + +## 物理连接 + +### 传感器选择 + + + +   传感器选择如下图所示的型号为ATGM336H_5N的GPS模组。 + +### 传感器接线 + +  传感器与Waffle Nano 之间的接线方式如下表所示,且未在下表中显示的引脚均处于悬空不连装态。 + +| Waffle Nano | | +| ----------- | ---- | +| 3.3 | VCC | +| RX | TX | +| TX | RX | +| GND | GND | + +## 传感器库使用 + +​ 可以获取[ATGM336H_5N.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/blob/master/ATGM336H_5N_/code/ATGM336H_5N.py),将此库通过[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 的文件上传功能将此库上传到`Waffle Nano`上。 + +  我们在可以在主函数中使用以下代码导入此库。 + +``` + import ATGM336H_5N +``` + +  在对象构造函数中,我们需要传入一个已经构造好的`UART`对象。 + +``` +# 此处省略UART对象的构造过程 +ag = ATGM336H_5N.ATGM336H_5N(uart) #构造GPS对象 +``` + +  我们使用GPS对象的analysis()方法读取解析出来的信息元组 + +``` +Tmp = ag.analysis() #解析数据,获得信息元组 +``` + +​ 信息元组组成如下:(纬度参数, 纬度方向(N/S), 经度参数, 经度方向(E/W)) + +  关于此库相关细节说明详见代码注释 + +## 案例代码复现 + +  可以获取[main.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/blob/master/ATGM336H_5N_/code/main.py)函数,将其内容复制到[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 编辑器上传输给`Waffle Nano`,以复现此案例。 + +  案例相关细节说明详见代码注释 \ No newline at end of file diff --git a/ATGM336H_5N_/code/ATGM336H_5N.py b/ATGM336H_5N_/code/ATGM336H_5N.py new file mode 100644 index 0000000000000000000000000000000000000000..0ae00d9e5c2bae13926f33ba81085902bfa77d7e --- /dev/null +++ b/ATGM336H_5N_/code/ATGM336H_5N.py @@ -0,0 +1,64 @@ +#导入库 +from machine import UART,Pin +import utime + +#定义GPS模组类 +class ATGM336H_5N(): + def __init__(self,uart): + self.msg="" + self.sign=0 + self.sign2=0 + self.final="" + #经度参数 + self.longitude="" + #纬度参数 + self.latitude="" + #南/北经标记 + self.latitude_direction="" + #东/西经标记 + self.longitude_direction="" + self.uart = uart + + def analysis(self): + while(True): + #如果uart缓冲区非空 + while (not self.uart.bufempty()): + try: + temp=str(self.uart.read(1),'utf-8') + except UnicodeError as e: + time.sleep_us(1) + self.msg=self.msg+temp + if(temp=="\n"): + if(self.msg[0]=="$"): + self.sign=1 + break + else: + self.msg="" + if(self.sign==1): + self.sign=0 + if(self.msg[0:6]=="$GNRMC"): + count=0 + self.sign2=1 + while(self.msg.find(',')!=-1): + index=self.msg.find(',') + if(count==3): + self.latitude=self.msg[0:index] + if(count==4): + self.latitude_direction=self.msg[0:index] + if(count==5): + self.longitude=self.msg[0:index] + if(count==6): + self.longitude_direction=self.msg[0:index] + self.msg=self.msg[index+1:] + count=count+1 + if(self.sign2==1): + N=0 + if(self.latitude_direction=="N"): + N=1 + E=0 + if(self.longitude_direction=="E"): + E=1 + self.sign2=0 + self.msg="" + #返回信息元组 + return(self.latitude,self.latitude_direction,self.longitude,self.longitude_direction) \ No newline at end of file diff --git a/ATGM336H_5N_/code/main.py b/ATGM336H_5N_/code/main.py new file mode 100644 index 0000000000000000000000000000000000000000..5788bdbac82188e60b91f3748da0b3b21df222c7 --- /dev/null +++ b/ATGM336H_5N_/code/main.py @@ -0,0 +1,28 @@ +#导入库 +from machine import UART, Pin +import utime +from ATGM336H_5N import ATGM336H_5N + +#创建接口号为1的UART对象 +uart = UART(1) +#UART对象初始化 +uart.init(baudrate=9600, parity=0, rx=Pin(1), tx=Pin(0)) +#创建GPS对象 +ag = ATGM336H_5N(uart) + +while True: + #解析数据,获取信息元组 + Tmp = ag.analysis() + + #如果元组元素为空 + if (Tmp[0] == "" or Tmp[1] == "" or Tmp[2] == "" or Tmp[3] == ""): + print("No Signal") + #如果元组元素非空 + else: + print(Tmp[0]) + print(Tmp[1]) + print(Tmp[2]) + print(Tmp[3]) + + #设定解析频率 + utime.sleep(1) \ No newline at end of file diff --git a/ATGM336H_5N_/img/20210721225022.jpg b/ATGM336H_5N_/img/20210721225022.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4a400f0b5c5d7cc98c588716f68466024b0117a Binary files /dev/null and b/ATGM336H_5N_/img/20210721225022.jpg differ diff --git a/ATGM336H_5N_/img/20210722095432.jpg b/ATGM336H_5N_/img/20210722095432.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a1f5661074cafc7521d835dc2de781b73bc5998 Binary files /dev/null and b/ATGM336H_5N_/img/20210722095432.jpg differ diff --git a/ATGM336H_5N_/img/20210722095440.jpg b/ATGM336H_5N_/img/20210722095440.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfe30fd52eac6f516b3868945a122c3989207392 Binary files /dev/null and b/ATGM336H_5N_/img/20210722095440.jpg differ diff --git a/DS1307_/README.md b/DS1307_/README.md new file mode 100644 index 0000000000000000000000000000000000000000..264fbec26a4583aa04233e337c359603756bac9e --- /dev/null +++ b/DS1307_/README.md @@ -0,0 +1,56 @@ + + +# 时钟模块 + +## 案例展示 +![](img/20210716185257.jpg) + +## 物理连接 + +### 传感器选择 + +![](img/20210716185325.jpg) + +   传感器选择如下图所示的型号为DS1307的实时时钟传感器模组。 + +### 传感器接线 + +  传感器与Waffle Nano 之间的接线方式如下表所示,且未在下表中显示的引脚均处于悬空不连装态。 + +| Waffle Nano | | +| ----------- | ---- | +| 3.3 | VCC | +| IO0 | SDA | +| IO1 | SCL | +| GND | GND | + +## 传感器库使用 + +​ 可以获取[DS1307.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/blob/master/DS1307_/code/DS1307.py),将此库通过[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 的文件上传功能将此库上传到`Waffle Nano`上。 + +  我们在可以在主函数中使用以下代码导入此库。 + +``` +import DS1307 +``` + +  在对象构造函数中,我们需要传入一个已经构造好的`IIC`对象。 + +``` +# 此处省略IIC对象的构造过程 +ds = DS1307.DS1307(i2c) #构造实时时钟对象 +``` + +  我们使用实时时钟对象的datetime()方法读取出一个含有八个元素的元组。 + +``` +current = ds.datetime() #从实时时钟中获取数据 +``` + +  关于此库相关细节说明详见代码注释 + +## 案例代码复现 + +  可以获取[main.py](https://gitee.com/blackwalnutlabs/waffle-nano-v1-sensor-lib/blob/master/DS1307_/code/main.py)函数,将其内容复制到[Waffle Maker](https://wafflenano.blackwalnut.tech/ide/index.html#/editor) 编辑器上传输给`Waffle Nano`,以复现此案例。 + +  案例相关细节说明详见代码注释 \ No newline at end of file diff --git a/DS1307_/code/DS1307.py b/DS1307_/code/DS1307.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3b11b5142c982c4bf44490ab1da24b2414f73a --- /dev/null +++ b/DS1307_/code/DS1307.py @@ -0,0 +1,70 @@ +from micropython import const + +DATETIME_REG = const(0) # 0x00-0x06 +CHIP_HALT = const(128) +CONTROL_REG = const(7) # 0x07 +RAM_REG = const(8) # 0x08-0x3F + +class DS1307(object): + """Driver for the DS1307 RTC.""" + def __init__(self, i2c, addr=0x68): + self.i2c = i2c + self.addr = addr + self.weekday_start = 1 + self._halt = False + + def _dec2bcd(self, value): + """Convert decimal to binary coded decimal (BCD) format""" + return (value // 10) << 4 | (value % 10) + + def _bcd2dec(self, value): + """Convert binary coded decimal (BCD) format to decimal""" + return ((value >> 4) * 10) + (value & 0x0F) + + def datetime(self, datetime=None): + """Get or set datetime""" + if datetime is None: + buf = self.i2c.readfrom_mem(self.addr, DATETIME_REG, 7) + return ( + self._bcd2dec(buf[6]) + 2000, # year + self._bcd2dec(buf[5]), # month + self._bcd2dec(buf[4]), # day + self._bcd2dec(buf[3] - self.weekday_start), # weekday + self._bcd2dec(buf[2]), # hour + self._bcd2dec(buf[1]), # minute + self._bcd2dec(buf[0] & 0x7F), # second + 0 # subseconds + ) + buf = bytearray(7) + buf[0] = self._dec2bcd(datetime[6]) & 0x7F # second, msb = CH, 1=halt, 0=go + buf[1] = self._dec2bcd(datetime[5]) # minute + buf[2] = self._dec2bcd(datetime[4]) # hour + buf[3] = self._dec2bcd(datetime[3] + self.weekday_start) # weekday + buf[4] = self._dec2bcd(datetime[2]) # day + buf[5] = self._dec2bcd(datetime[1]) # month + buf[6] = self._dec2bcd(datetime[0] - 2000) # year + if (self._halt): + buf[0] |= (1 << 7) + self.i2c.writeto_mem(self.addr, DATETIME_REG, buf) + + def halt(self, val=None): + """Power up, power down or check status""" + if val is None: + return self._halt + reg = self.i2c.readfrom_mem(self.addr, DATETIME_REG, 1)[0] + if val: + reg |= CHIP_HALT + else: + reg &= ~CHIP_HALT + self._halt = bool(val) + self.i2c.writeto_mem(self.addr, DATETIME_REG, bytearray([reg])) + + def square_wave(self, sqw=0, out=0): + """Output square wave on pin SQ at 1Hz, 4.096kHz, 8.192kHz or 32.768kHz, + or disable the oscillator and output logic level high/low.""" + rs0 = 1 if sqw == 4 or sqw == 32 else 0 + rs1 = 1 if sqw == 8 or sqw == 32 else 0 + out = 1 if out > 0 else 0 + sqw = 1 if sqw > 0 else 0 + reg = rs0 | rs1 << 1 | sqw << 4 | out << 7 + self.i2c.writeto_mem(self.addr, CONTROL_REG, bytearray([reg])) diff --git a/DS1307_/code/main.py b/DS1307_/code/main.py new file mode 100644 index 0000000000000000000000000000000000000000..df9acc3afa4d4d12837e486a946c1eec58395c67 --- /dev/null +++ b/DS1307_/code/main.py @@ -0,0 +1,35 @@ +'''传入库''' +from machine import I2C, Pin,SPI +import utime +import st7789 +import ds1307 + +'''创建对象''' +i2c = I2C(1, sda=Pin(0), scl=Pin(1),freq=400000) +ds = ds1307.DS1307(i2c) + +'''屏幕的初始化''' +spi = SPI(0, baudrate=40000000, polarity=1, phase=0, bits=8, endia=0, sck=Pin(6), mosi=Pin(8)) +display = st7789.ST7789(spi, 240, 240, reset=Pin(11,func=Pin.GPIO, dir=Pin.OUT), dc=Pin(7,func=Pin.GPIO, dir=Pin.OUT)) +display.init() +display.draw_string(50, 230, "Powered by BlackWalnuut Labs.") + +'''将屏幕背景渲染为白色''' +display.fill(st7789.color565(255, 255, 255)) + + +while True: + current = ds.datetime() #获取当下的时刻元组 + year = current[0]+21 #获取年份 + month = current[1] #获取月份 + day = current[2] #获取日期 + date = current[3] #获取星期 + hour = current[4] #获取小时 + minute = current[5] #获取分钟 + second = current[6] #获取秒 + former = "%04d/%02d/%02d" % (year,month,day) #格式化具体某一天 + later = "%02d:%02d:%02d" % (hour,minute,second) #格式化一天当中的时刻 + #将当下时刻累计的步数输出在显示屏上 + display.draw_string(10, 10,former,size=3,color=st7789.color565(0, 0, 0)) + display.draw_string(10, 40,later,size=3,color=st7789.color565(0, 0, 0)) + utime.sleep(1) #一秒获取一次时刻 \ No newline at end of file diff --git a/DS1307_/img/20210716185257.jpg b/DS1307_/img/20210716185257.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e58b52c85f36fb66333feb8c52d391440045b9a6 Binary files /dev/null and b/DS1307_/img/20210716185257.jpg differ diff --git a/DS1307_/img/20210716185325.jpg b/DS1307_/img/20210716185325.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03761da4e11e94792e5dbf3785c243c2ef2ddbab Binary files /dev/null and b/DS1307_/img/20210716185325.jpg differ