如何为micro:bit V2加载库?编写ds18b20库遇datetime导入错误
问题
近期我在为micro:bit编写DS18B20传感器库时遇到了问题,代码里尝试调用datetime库,但运行时报错。代码如下:
from microbit import * from datetime import datetime class DS18B20: def __init__(self, pin): self.pin = pin def sleep_us(self, us): lasttime = running_time() / 1000 nowtime = running_time() / 1000 while (nowtime - lasttime) < us: nowtime = running_time() / 1000 def DS18B20Reset(self): self.pin.write_digital(0) self.sleep_us(750) self.pin.write_digital(1) self.sleep_us(15) def DS18B20WriteByte(self, data): _data = 0 for i in range(8): _data = data & 0x01 data >>= 1 if _data: self.pin.write_digital(0) self.sleep_us(2) self.pin.write_digital(1) self.sleep_us(60) else: self.pin.write_digital(0) self.sleep_us(60) self.pin.write_digital(1) self.sleep_us(2)
运行后出现错误:
Traceback (most recent call last): File "main.py", line 2, in <module> ImportError: no module named 'datetime'
请问如何为micro:bit V2加载所需库,解决该导入错误?
解决方法
移除无用导入
你的代码里并未实际使用datetime库,只是做了导入操作,直接删掉from datetime import datetime这一行即可解决当前的导入错误。替换自定义延时函数为内置函数
你手动实现的sleep_us函数完全可以用micro:bit模块内置的sleep_us()替代,无需自己写循环计时,修改后代码更简洁可靠:from microbit import * class DS18B20: def __init__(self, pin): self.pin = pin def DS18B20Reset(self): self.pin.write_digital(0) sleep_us(750) self.pin.write_digital(1) sleep_us(15) def DS18B20WriteByte(self, data): _data = 0 for i in range(8): _data = data & 0x01 data >>= 1 if _data: self.pin.write_digital(0) sleep_us(2) self.pin.write_digital(1) sleep_us(60) else: self.pin.write_digital(0) sleep_us(60) self.pin.write_digital(1) sleep_us(2)若需日期时间功能的处理方式
micro:bit的MicroPython是精简环境,没有内置标准datetime库,如果之后确实需要日期时间相关功能:- 优先用micro:bit自带的时间函数:比如
running_time()(返回开机以来的毫秒数)、time()(配合RTC使用,返回特定时间点起的秒数) - 若需要完整日期时间处理,需找到适配micro:bit的第三方datetime库(
.py格式),将该库文件和主代码一起上传到micro:bit设备,之后即可正常导入使用。
- 优先用micro:bit自带的时间函数:比如
内容的提问来源于stack exchange,提问作者TosiX
相关产品推荐
相关产品推荐

