搞Micropython已经有半年多了,其实从一开始想给屏幕写个驱动来的,那时候刚入门啥也不懂,看啥都是天书,头大得很,现在已经陆续搞定了不少传感器等器件了,遇到新东西一点也不慌了,最近有个网友让我帮搞一个SHTC3的驱动,我直接答应了,说没有我搞不定的,哈哈牛逼先吹出去了。
先说一下给某器件写驱动的思路:
1.自行百度一下你要写的是什么东西,心里大致有个数,我一听SHTC3谁知道什么鬼东西,搜一下就知道,温湿度传感器,I2C通信接口,一看就大致有数了;
2.尽全力可能搜一下现成的资源,这一步也挺关键,有现成的谁还费事自己搞呀,拿来就完了,搜索这里我个人的习惯是,github和谷歌过一遍,这俩没有的那就真的没有了,很遗憾SHTC3这个还真的全网没有,倒是找到了C语言的驱动,可以把手动编写转为移植,难度也能低一些,但是我不需要,就硬刚就完了;
3.找技术手册,干这行啃技术手册是必备课,我都是纯自己琢磨的,实在不懂就去B站看点教学视频找灵感,从开始屁都不懂到现在直接定位要害,经历了痛苦的过程,手册嘛有英文的就行,想深入英文必须啃,好在专业词汇其实就那么多,虽然开始跟看天书似的,相信我啃一段时间就好了。而且你要知道写手册的目的就是给人看的,不是难倒谁的,工程师的基操啦。SHTC3的手册是我直接在CSDN资源里面下的,现在挣钱了,财大气粗了,直接充CSDN会员,不想花钱的小伙伴去淘宝管客服要,一般都会给的哦;
4.写代码,调试,所以说你手里肯定得有这个硬件才好写好调试,以此为由蹭了很多老板的模块啥的,攒了一点硬件小金库,虽然在别人开来都是毫无用处的破烂。
现在就正式开干了,打开纯英文技术手册,13页,算少的了,你要知道手册是完全体,有很多电器指标啥的是给做硬件的人看的,咱一程序猿,只关心软件部分,所以手册再厚,其实用得上的核心东西,多说也就一两页,直接找到核心
**5.4 Measuring and Reading the Signals **
这不明摆着告诉你怎么读数据嘛,进去还有张图,好家伙很细,直接抄就完了。
说得够细了,就像把大象装冰箱分几步,测量分四布:1.唤醒指令 2.测量指令 3.读取指令 4.睡眠指令
是的就这么直接,甚至给出了完整的图,懒人直接抄数据就完了。
最下面两行说了,如果是按这个图来,结果是63%湿度和23.7温度,这是咋来的呢,往下翻,翻到了公式
最后得到的原始数值按这个公式来搞一下就行了
最后附上完整的代码
#by:jd3096 20210826 shtc3 measure
from machine import I2C,Pin
import time
shtc3 = I2C(scl=Pin(17), sda=Pin(16))
def measure():
#print(shtc3.scan())
shtc3.start()
shtc3.writeto(112, b'\x35\x17')
shtc3.stop()
time.sleep_ms(100)
shtc3.start()
shtc3.writeto(112, b'\x7c\xa2')
shtc3.stop()
time.sleep_ms(100)
shtc3.start()
rawdata=shtc3.readfrom(112,6)
rawtem=rawdata[0:2]
numtem=int().from_bytes(rawtem,'big')
tem=-45+175*numtem/65536
rawhum=rawdata[3:5]
numhum=int().from_bytes(rawhum,'big')
hum=100*numhum/65535
shtc3.stop()
return tem,hum
while 1:
a,b=measure()
print('温度是:%f 湿度是:%f'%(a,b))
time.sleep(1)
用最简单的代码实现的,最后不得不说一下,那个发送和读取的0xe0,0xe1真的太坑人了,Micropython的I2C库应该是包含了这两个指令,所以不用再发送了!!!