pin模块
概述
源师兄内部开放一个11个pin接口,分别为:0,1,2,5,8,11,12,13,14,15,16
API描述
pin类位于ohcode模块下
示例
from ohcode import pin
#初始化pin
pin1=pin(1, pin.IN)
#读取数据
pin1.read_digital()
构造函数
pin1 = pin(id,mode)
【参数】
- id: 引脚号,取值:[0,1,2,5,8,11,12,13,14,15,16]
- mode: 输入(pin.IN)或输出模式(pin.OUT)
read_digital
pin1.read_digital()
【参数】
- 无
【返回值】
- 读取到的数字值:0或1
write_digital
pin1.write_digital(value)
【参数】
- value: 参数值:0或1
【返回值】
- 无
pwm模块
API描述
源师兄内部开放一个6个pwm接口,分别为:0,1,2,8,12,13
示例
from ohcode import pwm
#初始化pwm
pwm1=pwm(1)
#设置占空比
pwm1.duty(50)
#设置频率
pwm1.freq(2000)
构造函数
pwm1 = pwm(id,freq=10000, duty=0)
【参数】
- id: 引脚号,取值:[0,1,2,8,12,13]
- freq: PWM通道输出频率
- duty: PWM通道输出占空比,指高电平占整个周期的百分比,取值:[0,100],可选参数,默认0
duty
pwm1.duty(value)#获取或设置PWM通道输出占空比
【参数】
- value: PWM通道输出占空比,可选参数,如果不传参数则返回当前占空比
【返回值】
- 返回空或当前PWM通道输出占空比
freq
pwm1.freq(value)#获取或设置PWM通道输出频率
【参数】
- value: PWM通道输出频率,可选参数,如果不传参数则返回当前频率
【返回值】
- 返回空或当前PWM通道输出频率
adc模块
API描述
源师兄内部开放一个4个ADC接口,分别为:1,2,13,14
示例
from ohcode import adc
#初始化adc
adc1=adc(1)
#读取数据
adc1.read_analog()
构造函数
adc1 = adc(id)
【参数】
- id: 端口号,有效值:1,2,13,14
read_analog
adc1.read_analog()
【参数】
- 无
【返回值】
- 模块的模拟值(0-4095)
I2C模块
API描述
源师兄开放1个I2C硬件模块,支持标准100kb/s,快速400kb/s模式,高速模式3.4Mb/s。
示例
from machine import I2C
# i2c0 init 100KHz clock
i2c = I2C(1, freq=100000)
# 扫描I2C总线上的设备
i2c.scan()
# 从总线设备设备addr中读取全部数据
i2c.readinto(addr)
# 从总线设备设备addr中读取len长度的数据
i2c.readfrom(addr, len)
# 从总线设备addr中读取数据并将数据存到buf中
i2c.readfrom_into(addr, buf)
# 向总线设备addr发送数据buf
i2c.writeto(addr, buf)
# 向总线设备addr的memaddr写入buff的men_size个字节
i2c.writeto_mem(addr, memaddr, buf, mem_size)
构造函数
i2c = I2C(id, freq=100000)
【参数】
- id: 1
- freq: I2C时钟频率
scan
i2c.scan() #扫描I2C总线上的从机
【参数】
- 无
【返回值】
- list 对象, 包含了所有扫描到的从机地址
readinto
i2c.readinto(addr) #从总线读取全部数据
【参数】
- addr: 从机地址
【返回值】
- 读取到的数据,bytes 类型
readfrom
i2c.readfrom(addr, len) #从总线读取一定长度的数据
【参数】
- addr: 从机地址
- len: 数据长度
【返回值】
- 读取到的数据,bytes 类型
readfrom_into
i2c.readfrom_into(addr, buf) #读取数据并放到制定变量中
【参数】
- addr: 从机地址
- buf: bytearray类型, 定义了长度,读取到的数据存放在此
【返回值】
- 无
writeto
i2c.writeto(addr, buf) #发送数据到从机
【参数】
- addr: 从机地址
- buf: 需要发送的数据
【返回值】
- 成功发送的字节数
writeto_mem
i2c.writeto_mem(addr, memaddr, buf, mem_size=8) #写数据到从机寄存器
【参数】
- addr: 从机地址
- memaddr: 从机寄存器地址
- buf: 需要写的数据
- mem_size: 寄存器宽度, 默认为8位
【返回值】
- 无
uart模块
API描述
源师兄内部开放一个硬件串口
示例
from machine import UART
#初始化串口
uart=UART(2)
uart.init(9600, bits=8, parity=None, stop=1)
uart.write("Hello word. \r\n")
#串口读取数据
r = uart.read()
#读取数据到buffer
b = bytearray(8)
r = uart.readinto(b)
#关闭串口
uart.deinit()
构造函数
uart = UART(id, baudrate=115200,bits=8, parity=None, stop=1)
【参数】
- id: UART号,有效值2
- baudrate: UART波特率,可选参数,默认115200
- bits: 每个字符的位数,7、8 或 9,可选参数
- parity:是奇偶校验,0(偶数)或 1(奇数),默认为None
- stop:是停止位数,1 或 2,默认为1
init
uart.init(baudrate=115200,bits=8, parity=None, stop=1)
【参数】
- baudrate: UART波特率,可选参数,默认115200
- bits: 每个字符的位数,7、8 或 9,可选参数
- parity:是奇偶校验,0(偶数)或 1(奇数),默认为None
- stop:是停止位数,1 或 2,默认为1
【返回值】
- 无
read
uart.read([nbytes]) # 读取字符。若指定nbytes,则最多读取该数量的字节。否则可读取尽可能多的数据。
【参数】
- nbytes: 最多读取nbytes字节,可选参数
【返回值】
- 一个包括读入字节的字节对象
readinto
uart.readinto(buf[, nbytes]) #将字节读取入buf。若指定nbytes,则最多读取该数量的字节。否则,最多读取len(buf)数量的字节
【参数】
- buf: 一个buffer对象
- nbytes: 最多读取nbytes字节,可选参数
【返回值】
- 读取并存入buf的字节数
write
uart.write(buf) #将字节缓冲区写入UART。
【参数】
- buf: 一个buffer对象
【返回值】
- 写入的字节数
deinit
uart.deinit() #释放UART资源
【参数】
- 无
【返回值】
- 无
timer模块
API描述
源师兄中一共有两个定时器,但只开放了0号计时器
示例
from machine import Timer
#实例化一个定时器
Tim1 = Timer(0)
Tim1.init(period=500, mode=Timer.PERIODIC, callback=lambda t:print("I am one periodic time"))
tim1.init(period=300, mode=Timer.ONE_SHOT, callback=lambda t:print('I am one shot time'))
Tim1.value()
构造函数
Timer(index, mode=Timer.PERIODIC, freq=-1,period=-1,callback=None,arg=None)
【参数】
- index: Timer号,取值:0代表硬件定时器
- mode: 运行模式,单次(Timer.ONE_SHOT)或周期(Timer.PERIODIC),可选参数
- freq: Timer运行频率,支持浮点,单位Hz,可选参数
- period: Timer运行周期,单位ms,可选参数
- callback: 超时回调函数,必须设置,要带一个参数
- arg: 超时回调函数参数,可选参数
【返回值】
- timer对象:Timer(index, mode, period),通过value可以获取定时器的index
init
Timer.init(mode=Timer.PERIODIC, freq=-1,period=-1,callback=None, arg=None) #初始化定时器参数
【参数】
- mode: 运行模式,单次或周期,可选参数
- freq: Timer运行频率,支持浮点,单位Hz,可选参数,优先级高于period
- period: Timer运行周期,单位ms,可选参数
- callback: 超时回调函数,必须设置,要带一个参数
- arg: 超时回调函数参数,可选参数
【返回值】
- timer对象:Timer(index, mode, period),通过value可以获取定时器的index
deinit
timer.deinit() #释放Timer资源
【参数】
- 无
【返回值】
- 无
oled模块
API描述
源师兄板载一个oled屏幕,可用于输出文字和表情图案
示例
from ohcode import oled
#显示文字
oled.show('您好,中国!')
#显示表情
oled.show('\:HEART')
#按行显示
oled.show_by_line('您好,中国!',1,1)
oled.flush()
#按坐标位置显示
oled.show_by_coord('您好,中国!',0,0)
oled.flush()
#按坐标位点亮位置点
oled.show_by_pixel(0,0,1)
oled.flush()
构造函数
uart = UART(id, baudrate=115200,bits=8, parity=None, stop=1)
【参数】
- id: UART号,有效值2
- baudrate: UART波特率,可选参数,默认115200
- bits: 每个字符的位数,7、8 或 9,可选参数
- parity:是奇偶校验,0(偶数)或 1(奇数),默认为None
- stop:是停止位数,1 或 2,默认为1
show
oled.show(content)
【参数】
- contnet: 需要显示的内容或表情。源师兄内置12个表情符号
- 大爱心:’\:HEART’
- 小爱心:’\:HEART_SMALL’
- 开心: ‘\:HAPPY’
- 微笑: ‘\:SMILE’
- 哭:’\:CRY’
- 悲伤:’\:SAD’
- 生气:’\:ANGRY’
- 吃惊:’\:SURPRISE’
- 对勾:’\:YES’
- 错误:’\:NO’
- 礼物:’\:GIFT’
- 喜欢:’\:LIKE‘
show_by_line
oled.show_by_line(contrnt,row,col)
【参数】
- content: 字符串
- row: 行数,参数1-5
- col: 列数
【返回值】
- 无
show_by_coord
oled.show_by_coord(contrnt,row,col)
【参数】
- content: 字符串
- row: 行坐标,参数:0-127
- col: 列数坐标,参数:0-63
【返回值】
- 无
show_by_pixel
oled.show_by_pixel(row,col,pix)
【参数】
- row: 行坐标,参数:0-127
- col: 列数坐标,参数:0-63
- pix: 参数为0(熄灭)或1(点亮),
【返回值】
- 无
bit_map(start_x,start_y,width,height,state,bmp)
bmp = bytearray([\
0X00,0X00,0X00,0X00,0X03,0XC7,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X1E,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X31,0X70,0X3F,0XFC,0X00,0X00])
oled.__BOLED.bit_map(0,0,30,30,1,bmp)#在屏幕上绘制像素图片
oled.flush()
【参数】
- start_x:绘制起始x坐标,范围:0-127
- start_y: 绘制起始y坐标,范围:0-63
- width:图片的宽度
- height:图片的高度
- state:显示状态,0表示清除,1表示显示
- bmp:位图数据字节数组
【返回值】
- 无
flush
oled.flush()#刷新显示,按行、坐标等显示需要使用此方法才能刷新显示内容
【参数】
- 无
【返回值】
- 无
clear_line
oled.clear_line(row,clear)#按行清除内容
【参数】
- row: 行数
- clear: 清除状态,默认为0
【返回值】
- 无
clear
oled.clear()#清除整个屏幕内容
【参数】
- 无
【返回值】
- 无
button模块
API描述
源师兄板载两个button按钮,分别为A、B
示例
from ohcode import button
#初始化button
but1=button(1)
#读取button状态
but1.is_pressed()
#回调函数
def smile(sw):
print("smile")
#设置按键回调
but1.event_pressed(smile)
构造函数
but1 = button(num)
【参数】
- num: 按键号,按键A为1,按键B为2
is_pressed
but1.is_pressed()
【参数】
- 无
【返回值】
- 返回当前的按键状态,按下为True,未按下为False
event_pressed
but1.event_pressed(func)#按键按下时自动调用指定函数
【参数】
- func: 回调函数。注意定义回调函数时需要设置一个形式参数用于接收按键对象
【返回值】
- 无
wifi模块
API描述
源师兄内置WiFi功能,通过WiFi模块可以让源师兄连接到互联网,也可以通过WiFi模块让源师兄创建WiFi热点,组建临时局域网
示例
#1.连接WiFi模式
from ohcode import wifi
#连接WiFi
wifi.connect("yuanshixong","1234qwer",timeout = 3000)
#查看连接状态
print(wifi.status())
#查看连接信息
print(wifi.info())
#2.AP模式
from ohcode import wifi
#设置WiFi名和密码
wifi.set_ap("yuanshixiong","yuanshixong")
#查看是否有设备连接
print(wifi.check_isconnect())
#查看AP属性
print(wifi.ap_config())
connect
wifi.connect(ssid, psd, timeout) #设置连接参数
【参数】
- ssid: WiFi名称(源师兄仅支持2.4G频段WiFi)
- psd: WiFi密码
- timeout:连接WiFi时的超时时间,单位:毫秒,默认10毫秒
【返回值】
- 无
status
wifi.status()
【参数】
- 无
【返回值】
- 如果连接成功,返回True
- 否者,返回False
info
wifi.info()
【参数】
- 无
【返回值】
- 返回连接WiFi网络的详细信息:IP 地址、子网掩码、网关和 DNS 服务器
set_ap
wifi.set_ap(ssid, psd) #开启WiFi热点
【参数】
- ssid: 创建wifi热点的名称,用户名不能数字开头
- psd: 创建wifi热点的密码,密码不能少于8位
【返回值】
- 无
check_isconnect
wifi.check_isconnect()
【参数】
- 无
【返回值】
- 如果有设备连接到wifi,返回:True
- 否则返回:False
ap_config
wifi.ap_config()
【参数】
- 无
【返回值】
- 返回wifi热点的配置信息
mqtt模块
API描述
在具备稳定网络连接的前提下,源师兄可以通过 MQTT(消息队列遥测传输协议)实现设备间的高效物联网通信。通过该协议,源师兄能够在客户端与服务器之间进行轻量级、低延迟的消息传输,从而实现远程设备的状态监控、数据交换及控制指令的发送。
示例
from ohcode import mqtt
#连接mqtt服务
mqtt.connect('ide.ohcode.com', 1883, 'yuanshixiong', '', '', timeout=3000)
#向《msh》话题发布消息:hello!
mqtt.publish('msh','hello!')
def callback_fun():
#获取回调消息
msg = mqtt.message("msh")
print("msg::",msg)
#设置消息回调
mqtt.received("msh",callback_fun)
connect
mqtt.connect(server, port, client_id, user, psd, timeout) #连接mqtt服务
【参数】
- server : MQTT 服务器的地址。
- port : MQTT 服务的端口号,默认值为 1883。
- client_id :用于标识连接到服务器的客户端名称,通常是唯一的。
- user: 用于登录 MQTT 服务的用户名。如果不需要用户名验证,可以设置为空字符串。
- psd: 用于登录 MQTT 服务的密码。如果不需要密码验证,可以设置为空字符串
- timeout: 连接服务器的超时时间,单位为毫秒,默认为 3000 毫秒。
【返回值】
- 如果成功连接到 MQTT 服务,返回一个 MQTT 客户端对象;
- 如果连接失败,返回 `None`。
message
mqtt.message(topic) #获取话题:topic的消息
【参数】
- topic : 话题名称
【返回值】
- 如果检测到话题《topic》的消息,则返回消息内容
- 否则,返回《None》
received
mqtt.received(topic,func) #设置消息回调
【参数】
- topic : 话题名称
- func: 回调函数
【返回值】
- 空
connected
mqtt.connected() #判断是否与MQTT服务器连接成功
【参数】
- 无
【返回值】
- 如果成功连接到MQTT服务器,返回《True》
- 否则,返回《False》
星闪模块
API描述
通过星闪实现源师兄与源师兄之间的数据通信。
示例-广播
#星闪通信方式一:广播(该模式下数据发送与数据接收代码相同,主要广播频道号一样,设备之间就可以收发消息)
from ohcode import sle
from ohcode import oled
#创建星闪对象
slee = sle()
#设置星闪数据通信频道号,频道号范围0-255
slee.start_adv(16)
#发送星闪消息
slee.send('hi')
#判断是否收到消息
if ((slee.received())):
#oled屏幕显示收到的消息
oled.show((slee.message()[1]))
构造函数
slee = sle()
【参数】
- 无
【返回值】
- 星闪对象
start_adv(num)
slee.start_adv(num)#设置星闪广播频道号,频道号区间为:0-255
【参数】
- num: 频道号
【返回值】
- 无
send(msg)
slee.send(msg)#广播消息内容
【参数】
- msg: 文本消息内容
【返回值】
- 无
received()
slee.received()#判断设备是否收到消息
【参数】
- 无
【返回值】
- 收到消息返回True,否则返回False
message()
slee.message()#读取消息内容,消息以列表格式返回[设备名,消息内容]
【参数】
- 无
【返回值】
- 返回列表,列表中两个元素,第一个元素:发送消息设备信息,第二个元素:消息内容
示例-连接通信
from ohcode import sle
from ohcode import oled
import time
#创建星闪服务端对象
slee= sle('s_1')
#启动监听设备连接
slee.set_ap()
#定义一个主函数
def main():
while True:
#判断是否收到消息
if (slee.received()):
#oled显示收到的消息内容
oled.show((slee.message()[1]))
#给c_1客户端发送消息《hello》
slee.send('hello','c_1',100)
time.sleep(1)
main()
from ohcode import sle
from ohcode import oled
import time
#创建星闪客户端对象
slee= sle('c_1')
def main():
#连接服务端
slee.connect('s_1')
#判断星闪是否连接成功,没有连接成功则一直等待
while not (slee.connected()):
time.sleep(1)
while True:
#发送消息给服务端
slee.send('yes')
#屏幕显示收到的消息
oled.show(slee.message()[1])
time.sleep_ms(200)
main()