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模块
+
+## 案例展示
+
+如果在室内没有接受到信号时:
+
+
+
+在室外接收到信号时:
+
+
+
+
+
+## 物理连接
+
+### 传感器选择
+
+
+
+ 传感器选择如下图所示的型号为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 @@
+
+
+# 时钟模块
+
+## 案例展示
+
+
+## 物理连接
+
+### 传感器选择
+
+
+
+ 传感器选择如下图所示的型号为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