月度归档:2024年04月

micropython WDT看门狗Timer 时间中断喂狗;回调函数lambda传参数



from machine import WDT
wdt=WDT(timeout=10000)

#设置10秒
wdt.feed()

#喂狗 10秒不喂狗 自动重启

自动化喂狗

from machine import WDT,Timer
wdt=WDT(timeout=10000)
tdog=Timer(1)
tdog.init(mode=Timer.PERIODIC, period=5000, callback=lambda x:wdt.feed())

自动喂狗 ,开启一个Timer 1 每5000ms,5秒 喂一次狗·,如果Timer 1 不能运行,就重启

ESP32拥有4个定时器 0 1 2 3

  • Timer.ONE_SHOT:只执行一次定时任务。
  • Timer.PERIODIC:循环执行定时任务。

tdog.init(mode=Timer.PERIODIC, period=5000, callback=lambda x:wdt.feed())

callback=lambda x:mkmk(1)
回调函数 默认传参数是timer对象本身
,所以其他参数必须使用lambda匿名函数传参数

心知天气API使用

import urequests
 
def weather(key,city):
        url="http://api.seniverse.com/v3/weather/now.json?key=%s&location=%s&language=zh-Hans&unit=c" % (key,city)
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE' }
        ba=[]
        print(url)
        re=urequests.get(url,headers=headers)
        my=re.json()
        weather_status=["晴","晴","晴","晴","多云","晴间多云","晴间多云","大部多云","大部多云","阴","阵雨","雷阵雨","雷阵雨伴有冰雹","小雨","中雨","大雨","暴雨","大暴雨","特大暴雨","冻雨","雨夹雪","阵雪","小雪","中雪","大雪","暴雪","浮尘","扬沙","沙尘暴","强沙尘暴","雾","霾","风","大风","飓风","热带风暴","龙卷风","冷","热","未知"]
        code=my['results'][0]['now']['code']#天气代码
        tep=my['results'][0]['now']['temperature']#温度
        return [tep,code,weather_status[int(code)]]
key="私钥"

#参数key,城市拼音
weather(key,"suzhou")

micropython rtc NTP同步时间

import ntptime,time
from machine import RTC
#必须已经联网
ntptime.host="ntp1.aliyun.com"
ntptime.settime()
#同步NTP时间
rtc=RTC()
datetime=rtc.datetime()
print(datetime)

$ (2024, 4, 28, 6, 15, 7, 56, 487580)
0 年 
1 月 
2 日 
3 周几(从0开始 6为周日) 
4 小时 东八区+8
5 分钟 
6 秒

#下面返回当前时间
def datetime():
#     返回UTC0
    date=time.localtime(time.time()+3600*8)
    #(2024, 4, 29, 9, 58, 14, 0, 120) 年 月 日 时 分 秒 周 全年的第几天
    return date 

#数据格式
0 年 
1 月 
2 日 
3 时
4 分钟
5 秒
6 周
7 全年的第几天

bytes micropython处理

1.bytes转str

b’asasas’.decode(“utf8”)

2.bytes的hex转   信息 b'\xacg\xb27-\xcc'

import binascii

mac_bytes = b'\xacg\xb27-\xcc'

mac_str = binascii.hexlify(mac_bytes).decode() print(mac_str)

ac67b2372dcc

3.bytes转字节显示

data = b’hello!’

”.join([‘{:02x}’.format(b) for b in data])

‘68656c6c6f’

4.若含有gb2312 等其他非utf8编码 则无法转换:

解决方法一:可以调用find查询到某一字符串截取到utf8的信息

解决方法二:可以调用split分割,取含有utf8字符串的信息

总体来说需要舍弃非UTF8的字符串

记录 bytes 转str

 data = b'hello!'
>>> ''.join(['{:02x}'.format(b) for b in data])
'68656c6c6f'

转换成标准bytes的b’\xaa\xb1’转换为HEX

import binascii

mac_bytes = b'\xacg\xb27-\xcc'
mac_str = binascii.hexlify(mac_bytes).decode()
print(mac_str)
ac67b2372dcc