1679|8

1万

帖子

25

TA的资源

版主

楼主
 

【Beetle ESP32-C3】几个micropython的例子 [复制链接]

下载了micropython固件,就可以轻松开始测试。先通过几个小程序测试一下:

 

闪灯

 

from machine import Pin
from time import sleep_ms

LED = Pin(10, Pin.OUT)
while 1:
    LED(not LED())
    sleep_ms(500)

 

此帖出自RF/无线论坛
点赞 关注
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
本帖最后由 dcexpert 于 2022-8-4 11:00 编辑

呼吸灯(通过定时器改变PWM占空比)


 

from machine import Pin, Timer, PWM

LED = PWM(Pin(10))

n = 0

def breathing(t):
    global n
    LED.duty(abs(1023- n*32))
    n = (n + 1) % 64

T0 = Timer(0)
T0.init(period=20, mode=Timer.PERIODIC, callback=breathing)

 

此帖出自RF/无线论坛
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 
本帖最后由 dcexpert 于 2022-8-4 11:00 编辑

引脚电平中断(改变引脚上的电平,触发中断,下面使用IO0)


 

from machine import Pin

LED = Pin(10, Pin.OUT)

def pin_irq(t):
    LED(not LED())

p0 = Pin(0, Pin.IN, pull=Pin.PULL_UP)
p0.irq(trigger = Pin.IRQ_FALLING, handler=pin_irq)

 

此帖出自RF/无线论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

4
 
本帖最后由 dcexpert 于 2022-8-4 10:59 编辑

定时器


 

from machine import Pin, Timer

LED = Pin(10, Pin.OUT)
tm =Timer(0)
tm.init(period=1000, mode=Timer.PERIODIC, callback=lambda t:LED(not LED()))

 

目前的micropython固件在esp32c3上存在bug,定时器的时间是实际时间2倍。

此帖出自RF/无线论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
本帖最后由 dcexpert 于 2022-8-4 10:59 编辑

ADC


 

from machine import ADC, Pin
from time import sleep_ms

led = Pin(10, Pin.OUT)
adc = ADC(Pin(3))
cnt = 0

while 1:
    print(cnt, adc.read_uv())
    led(not led())
    cnt+=1
    sleep_ms(500)

 

此帖出自RF/无线论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

6
 
本帖最后由 dcexpert 于 2022-8-4 10:58 编辑

串口(串口可以使用任意IO,下面程序使用IO5发送,IO7接收)


 

from machine import Pin, UART
from time import sleep_ms

led = Pin(10, Pin.OUT)
uart = UART(1, tx=5, rx=7)
cnt = 1

while 1:
    uart.write(str(cnt))
    if uart.any():
        print('>', uart.read())
    cnt+=1
    led(not led())
    sleep_ms(500)

 

此帖出自RF/无线论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
本帖最后由 dcexpert 于 2022-8-4 10:58 编辑

RTC


 

from machine import RTC
from time import sleep_ms

rtc = RTC()
while 1:
    print(rtc.datetime())
    sleep_ms(1000)

 

此帖出自RF/无线论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

8
 

异步(多任务)

 

import uasyncio as asyncio
from machine import Pin
import time

LED = Pin(10, Pin.OUT)

async def blink():

    while True:
        LED(not LED())
        await asyncio.sleep(1)

async def show():
    cnt = 1
    T1 = time.ticks_us()
    while True:
        T2 = time.ticks_us()
        print(cnt, time.ticks_diff(T2, T1))
        T1 = T2
        cnt += 1
        await asyncio.sleep(2)


asyncio.create_task(blink())
asyncio.create_task(show())
asyncio.Loop.run_forever()

 

 

此帖出自RF/无线论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

9
 

SHT30温湿度传感器

 

为了省事,直接将SHT30传感器插到开发板。因为GND引脚顺序同,因此使用IO0做GND,此外 SDA=IO1,SCL=IO4。使用SoftI2C模式。

 

 

 

from machine import Pin, SoftI2C

Pin(0, Pin.OUT, value=0)


from time import sleep_ms

class SHT3x():

    def __init__(self, i2c, addr = 68):
        self.i2c = i2c
        self._addr = addr
        self.ver = '1.0'
        self.info = 'SHT3x I2C drive for micropython'
        self._mode = 1
        self._cmd = 0x240b
        self._delay = 6
        self._decimal = 1
        self._tb = bytearray(2)
        self._rb = bytearray(3)
        self._ht = bytearray(6)
        self._T = 0
        self._H = 0
        self.reset()

    def status(self):
        self.write(0xf32d)
        self.i2c.readfrom_into(self._addr, self._rb)
        return self._rb[0]*256 + self._rb[1]

    def clear_status(self):
        self.write(0x3041)

    def write(self, cmd):
        self._tb[0] = cmd>>8
        self._tb[1] = cmd
        self.i2c.writeto(self._addr, self._tb)

    def reset(self):
        self.write(0x30a2)
    
    def heater(self, on=0):
        if on: self.write(0x306d)
        else:  self.write(0x3066)
    
    def config(self, mode = 0x240b, delay = 6, decimal = 1):
        t = mode >> 8
        self._mode = 1 if t == 0x24 or t == 0x2C else 0
        self._cmd = mode
        self._delay = delay
        self._decimal = decimal
        self.write(mode)
        
    def measure(self):
        if self._mode:
            self.write(self._cmd)
            sleep_ms(self._delay)
        self.write(0xe000)
        self.i2c.readfrom_into(self._addr, self._ht)
        self._T = self._ht[0]*256+self._ht[1]
        self._H = self._ht[3]*256+self._ht[4]

    def humidity(self):
        return round(100*self._H/65535, self._decimal)

    def temperature(self):
        return round(175*self._T/65535 - 45, self._decimal)

    def ht(self):
        return self.humidity(), self.temperature()


i2c= SoftI2C(sda=Pin(1), scl=Pin(4))
sh = SHT3x(i2c)
sleep_ms(10)

while 1:
    sh.measure()
    print(sh.ht())
    sleep_ms(1000)

 

此帖出自RF/无线论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表