kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Add documentation and features to BMx280 modules
rodzic
be9b1437db
commit
218d8ea929
|
@ -0,0 +1,83 @@
|
|||
# BME280 <!-- omit in toc -->
|
||||
|
||||
- [Getting Started](#getting-started)
|
||||
- [Reading Temperature, Pressure & Humidity](#reading-temperature-pressure--humidity)
|
||||
- [Configuring The Sensor](#configuring-the-sensor)
|
||||
- [Filter Settings](#filter-settings)
|
||||
- [Oversampling Settings](#oversampling-settings)
|
||||
- [Mode Settings](#mode-settings)
|
||||
- [Standby/Output Data Rate Settings](#standbyoutput-data-rate-settings)
|
||||
- [Defaults](#defaults)
|
||||
|
||||
## Getting Started
|
||||
|
||||
Construct new `PimoroniI2C` and `BreakoutBME280` instances:
|
||||
|
||||
```python
|
||||
from breakout_bme280 import BreakoutBME280
|
||||
from pimoroni_i2c import PimoroniI2C
|
||||
|
||||
PINS_BREAKOUT_GARDEN = {"sda": 4, "scl": 5}
|
||||
PINS_PICO_EXPLORER = {"sda": 20, "scl": 21}
|
||||
|
||||
i2c = PimoroniI2C(**PINS_BREAKOUT_GARDEN)
|
||||
bme = BreakoutBME280(i2c)
|
||||
```
|
||||
|
||||
## Reading Temperature, Pressure & Humidity
|
||||
|
||||
The `read` method will return a tuple containing Temperature (degrees C), Pressure (Pa) and Humidity (RH %) values:
|
||||
|
||||
```python
|
||||
temperature, pressure, humidity = bme.read()
|
||||
```
|
||||
|
||||
## Configuring The Sensor
|
||||
|
||||
The `configure` method allows you to set up the oversampling, filtering and operation mode.
|
||||
|
||||
```python
|
||||
bmp.configure(filter, standby_time, os_pressure, os_humidity, os_temp, mode)
|
||||
```
|
||||
|
||||
The `breakout_bme280` module includes constants for these:
|
||||
|
||||
### Filter Settings
|
||||
|
||||
* `FILTER_COEFF_OFF`
|
||||
* `FILTER_COEFF_2`
|
||||
* `FILTER_COEFF_4`
|
||||
* `FILTER_COEFF_8`
|
||||
* `FILTER_COEFF_16`
|
||||
|
||||
### Oversampling Settings
|
||||
|
||||
* `NO_OVERSAMPLING`
|
||||
* `OVERSAMPLING_1X`
|
||||
* `OVERSAMPLING_2X`
|
||||
* `OVERSAMPLING_4X`
|
||||
* `OVERSAMPLING_8X`
|
||||
* `OVERSAMPLING_16X`
|
||||
|
||||
### Mode Settings
|
||||
|
||||
* `SLEEP_MODE`
|
||||
* `FORCED_MODE`
|
||||
* `NORMAL_MODE`
|
||||
|
||||
### Standby/Output Data Rate Settings
|
||||
|
||||
* `STANDBY_TIME_0_5_MS`
|
||||
* `STANDBY_TIME_62_5_MS`
|
||||
* `STANDBY_TIME_125_MS`
|
||||
* `STANDBY_TIME_250_MS`
|
||||
* `STANDBY_TIME_500_MS`
|
||||
* `STANDBY_TIME_1000_MS`
|
||||
* `STANDBY_TIME_2000_MS`
|
||||
* `STANDBY_TIME_4000_MS`
|
||||
|
||||
### Defaults
|
||||
|
||||
```python
|
||||
bme.configure(FILTER_COEFF_2, STANDBY_TIME_0_5_MS, OVERSAMPLING_16X, OVERSAMPLING_2X, OVERSAMPLING_1X)
|
||||
```
|
|
@ -6,10 +6,12 @@
|
|||
|
||||
/***** Methods *****/
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(BreakoutBME280_read_obj, BreakoutBME280_read);
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(BreakoutBME280_configure_obj, 1, BreakoutBME280_configure);
|
||||
|
||||
/***** Binding of Methods *****/
|
||||
STATIC const mp_rom_map_elem_t BreakoutBME280_locals_dict_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&BreakoutBME280_read_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_configure), MP_ROM_PTR(&BreakoutBME280_configure_obj) },
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(BreakoutBME280_locals_dict, BreakoutBME280_locals_dict_table);
|
||||
|
||||
|
@ -31,6 +33,32 @@ const mp_obj_type_t breakout_bme280_BreakoutBME280_type = {
|
|||
STATIC const mp_map_elem_t breakout_bme280_globals_table[] = {
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_breakout_bme280) },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_BreakoutBME280), (mp_obj_t)&breakout_bme280_BreakoutBME280_type },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_OFF), MP_ROM_INT(BME280_FILTER_COEFF_OFF) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_2), MP_ROM_INT(BME280_FILTER_COEFF_2) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_4), MP_ROM_INT(BME280_FILTER_COEFF_4) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_8), MP_ROM_INT(BME280_FILTER_COEFF_8) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_16), MP_ROM_INT(BME280_FILTER_COEFF_16) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_NO_OVERSAMPLING), MP_ROM_INT(BME280_NO_OVERSAMPLING) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_1X), MP_ROM_INT(BME280_OVERSAMPLING_1X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_2X), MP_ROM_INT(BME280_OVERSAMPLING_2X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_4X), MP_ROM_INT(BME280_OVERSAMPLING_4X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_8X), MP_ROM_INT(BME280_OVERSAMPLING_8X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_16X), MP_ROM_INT(BME280_OVERSAMPLING_16X) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SLEEP_MODE), MP_ROM_INT(BME280_SLEEP_MODE) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FORCED_MODE), MP_ROM_INT(BME280_FORCED_MODE) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_NORMAL_MODE), MP_ROM_INT(BME280_NORMAL_MODE) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_0_5_MS), MP_ROM_INT(BME280_STANDBY_TIME_0_5_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_62_5_MS), MP_ROM_INT(BME280_STANDBY_TIME_62_5_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_125_MS), MP_ROM_INT(BME280_STANDBY_TIME_125_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_250_MS), MP_ROM_INT(BME280_STANDBY_TIME_250_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_500_MS), MP_ROM_INT(BME280_STANDBY_TIME_500_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_1000_MS), MP_ROM_INT(BME280_STANDBY_TIME_1000_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_10_MS), MP_ROM_INT(BME280_STANDBY_TIME_10_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_20_MS), MP_ROM_INT(BME280_STANDBY_TIME_20_MS) },
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(mp_module_breakout_bme280_globals, breakout_bme280_globals_table);
|
||||
|
||||
|
|
|
@ -93,4 +93,33 @@ mp_obj_t BreakoutBME280_read(mp_obj_t self_in) {
|
|||
return mp_obj_new_tuple(3, tuple);
|
||||
}
|
||||
|
||||
mp_obj_t BreakoutBME280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_self, ARG_filter, ARG_standby_time, ARG_os_pressure, ARG_os_temp, ARG_os_humidity, ARG_mode };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_filter, MP_ARG_INT, { .u_int=BME280_FILTER_COEFF_2 } },
|
||||
{ MP_QSTR_standby_time, MP_ARG_INT, { .u_int=BME280_STANDBY_TIME_0_5_MS } },
|
||||
{ MP_QSTR_os_pressure, MP_ARG_INT, { .u_int=BME280_OVERSAMPLING_16X } },
|
||||
{ MP_QSTR_os_temp, MP_ARG_INT, { .u_int=BME280_OVERSAMPLING_2X } },
|
||||
{ MP_QSTR_os_humidity, MP_ARG_INT, { .u_int=BME280_OVERSAMPLING_1X } },
|
||||
{ MP_QSTR_mode, MP_ARG_INT, { .u_int=BME280_NORMAL_MODE } },
|
||||
};
|
||||
|
||||
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
||||
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
|
||||
breakout_bme280_BreakoutBME280_obj_t *self = MP_OBJ_TO_PTR2(args[ARG_self].u_obj, breakout_bme280_BreakoutBME280_obj_t);
|
||||
self->breakout->configure(
|
||||
args[ARG_filter].u_int,
|
||||
args[ARG_standby_time].u_int,
|
||||
args[ARG_os_pressure].u_int,
|
||||
args[ARG_os_temp].u_int,
|
||||
args[ARG_os_humidity].u_int,
|
||||
args[ARG_mode].u_int
|
||||
);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
// Include MicroPython API.
|
||||
#include "py/runtime.h"
|
||||
#include "drivers/bme280/src/bme280_defs.h"
|
||||
|
||||
/***** Constants *****/
|
||||
|
||||
|
@ -9,4 +10,5 @@ extern const mp_obj_type_t breakout_bme280_BreakoutBME280_type;
|
|||
/***** Extern of Class Methods *****/
|
||||
extern void BreakoutBME280_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind);
|
||||
extern mp_obj_t BreakoutBME280_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args);
|
||||
extern mp_obj_t BreakoutBME280_read(mp_obj_t self_in);
|
||||
extern mp_obj_t BreakoutBME280_read(mp_obj_t self_in);
|
||||
extern mp_obj_t BreakoutBME280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
|
|
@ -0,0 +1,83 @@
|
|||
# BMP280 <!-- omit in toc -->
|
||||
|
||||
- [Getting Started](#getting-started)
|
||||
- [Reading Temperature & Pressure](#reading-temperature--pressure)
|
||||
- [Configuring The Sensor](#configuring-the-sensor)
|
||||
- [Filter Settings](#filter-settings)
|
||||
- [Oversampling Settings](#oversampling-settings)
|
||||
- [Mode Settings](#mode-settings)
|
||||
- [Standby/Output Data Rate Settings](#standbyoutput-data-rate-settings)
|
||||
- [Defaults](#defaults)
|
||||
|
||||
## Getting Started
|
||||
|
||||
Construct new `PimoroniI2C` and `BreakoutBMP280` instances:
|
||||
|
||||
```python
|
||||
from breakout_bmp280 import BreakoutBMP280
|
||||
from pimoroni_i2c import PimoroniI2C
|
||||
|
||||
PINS_BREAKOUT_GARDEN = {"sda": 4, "scl": 5}
|
||||
PINS_PICO_EXPLORER = {"sda": 20, "scl": 21}
|
||||
|
||||
i2c = PimoroniI2C(**PINS_BREAKOUT_GARDEN)
|
||||
bmp = BreakoutBMP280(i2c)
|
||||
```
|
||||
|
||||
## Reading Temperature & Pressure
|
||||
|
||||
The `read` method will return a tuple containing Temperature (degrees C) and Pressure (Pa) values:
|
||||
|
||||
```python
|
||||
temperature, pressure = bmp.read()
|
||||
```
|
||||
|
||||
## Configuring The Sensor
|
||||
|
||||
The `configure` method allows you to set up the oversampling, filtering and operation mode.
|
||||
|
||||
```python
|
||||
bmp.configure(filter, standby_time, os_pressure, os_temp, mode)
|
||||
```
|
||||
|
||||
The `breakout_bmp280` module includes constants for these:
|
||||
|
||||
### Filter Settings
|
||||
|
||||
* `FILTER_COEFF_OFF`
|
||||
* `FILTER_COEFF_2`
|
||||
* `FILTER_COEFF_4`
|
||||
* `FILTER_COEFF_8`
|
||||
* `FILTER_COEFF_16`
|
||||
|
||||
### Oversampling Settings
|
||||
|
||||
* `NO_OVERSAMPLING`
|
||||
* `OVERSAMPLING_1X`
|
||||
* `OVERSAMPLING_2X`
|
||||
* `OVERSAMPLING_4X`
|
||||
* `OVERSAMPLING_8X`
|
||||
* `OVERSAMPLING_16X`
|
||||
|
||||
### Mode Settings
|
||||
|
||||
* `SLEEP_MODE`
|
||||
* `FORCED_MODE`
|
||||
* `NORMAL_MODE`
|
||||
|
||||
### Standby/Output Data Rate Settings
|
||||
|
||||
* `STANDBY_TIME_0_5_MS`
|
||||
* `STANDBY_TIME_62_5_MS`
|
||||
* `STANDBY_TIME_125_MS`
|
||||
* `STANDBY_TIME_250_MS`
|
||||
* `STANDBY_TIME_500_MS`
|
||||
* `STANDBY_TIME_1000_MS`
|
||||
* `STANDBY_TIME_2000_MS`
|
||||
* `STANDBY_TIME_4000_MS`
|
||||
|
||||
### Defaults
|
||||
|
||||
```python
|
||||
bmp.configure(FILTER_COEFF_2, STANDBY_TIME_1000_MS, OVERSAMPLING_4X, OVERSAMPLING_4X)
|
||||
```
|
|
@ -6,10 +6,12 @@
|
|||
|
||||
/***** Methods *****/
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(BreakoutBMP280_read_obj, BreakoutBMP280_read);
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(BreakoutBMP280_configure_obj, 1, BreakoutBMP280_configure);
|
||||
|
||||
/***** Binding of Methods *****/
|
||||
STATIC const mp_rom_map_elem_t BreakoutBMP280_locals_dict_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&BreakoutBMP280_read_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_configure), MP_ROM_PTR(&BreakoutBMP280_configure_obj) },
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(BreakoutBMP280_locals_dict, BreakoutBMP280_locals_dict_table);
|
||||
|
||||
|
@ -31,6 +33,32 @@ const mp_obj_type_t breakout_bmp280_BreakoutBMP280_type = {
|
|||
STATIC const mp_map_elem_t breakout_bmp280_globals_table[] = {
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_breakout_bmp280) },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_BreakoutBMP280), (mp_obj_t)&breakout_bmp280_BreakoutBMP280_type },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_OFF), MP_ROM_INT(BMP280_FILTER_OFF) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_2), MP_ROM_INT(BMP280_FILTER_COEFF_2) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_4), MP_ROM_INT(BMP280_FILTER_COEFF_4) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_8), MP_ROM_INT(BMP280_FILTER_COEFF_8) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_16), MP_ROM_INT(BMP280_FILTER_COEFF_16) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_NO_OVERSAMPLING), MP_ROM_INT(BMP280_OS_NONE) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_1X), MP_ROM_INT(BMP280_OS_1X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_2X), MP_ROM_INT(BMP280_OS_2X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_4X), MP_ROM_INT(BMP280_OS_4X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_8X), MP_ROM_INT(BMP280_OS_8X) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_16X), MP_ROM_INT(BMP280_OS_16X) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SLEEP_MODE), MP_ROM_INT(BMP280_SLEEP_MODE) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_FORCED_MODE), MP_ROM_INT(BMP280_FORCED_MODE) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_NORMAL_MODE), MP_ROM_INT(BMP280_NORMAL_MODE) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_0_5_MS), MP_ROM_INT(BMP280_ODR_0_5_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_62_5_MS), MP_ROM_INT(BMP280_ODR_62_5_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_125_MS), MP_ROM_INT(BMP280_ODR_125_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_250_MS), MP_ROM_INT(BMP280_ODR_250_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_500_MS), MP_ROM_INT(BMP280_ODR_500_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_1000_MS), MP_ROM_INT(BMP280_ODR_1000_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_2000_MS), MP_ROM_INT(BMP280_ODR_2000_MS) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_4000_MS), MP_ROM_INT(BMP280_ODR_4000_MS) },
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(mp_module_breakout_bmp280_globals, breakout_bmp280_globals_table);
|
||||
|
||||
|
|
|
@ -92,4 +92,30 @@ mp_obj_t BreakoutBMP280_read(mp_obj_t self_in) {
|
|||
return mp_obj_new_tuple(2, tuple);
|
||||
}
|
||||
|
||||
mp_obj_t BreakoutBMP280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_self, ARG_filter, ARG_standby_time, ARG_os_pressure, ARG_os_temp, ARG_mode };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_filter, MP_ARG_INT, { .u_int=BMP280_FILTER_COEFF_2 } },
|
||||
{ MP_QSTR_standby_time, MP_ARG_INT, { .u_int=BMP280_ODR_0_5_MS } },
|
||||
{ MP_QSTR_os_pressure, MP_ARG_INT, { .u_int=BMP280_OS_16X } },
|
||||
{ MP_QSTR_os_temp, MP_ARG_INT, { .u_int=BMP280_OS_2X } },
|
||||
{ MP_QSTR_mode, MP_ARG_INT, { .u_int=BMP280_NORMAL_MODE } },
|
||||
};
|
||||
|
||||
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
||||
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
|
||||
breakout_bmp280_BreakoutBMP280_obj_t *self = MP_OBJ_TO_PTR2(args[ARG_self].u_obj, breakout_bmp280_BreakoutBMP280_obj_t);
|
||||
self->breakout->configure(
|
||||
args[ARG_filter].u_int,
|
||||
args[ARG_standby_time].u_int,
|
||||
args[ARG_os_pressure].u_int,
|
||||
args[ARG_os_temp].u_int,
|
||||
args[ARG_mode].u_int
|
||||
);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
// Include MicroPython API.
|
||||
#include "py/runtime.h"
|
||||
#include "drivers/bmp280/src/bmp280_defs.h"
|
||||
|
||||
/***** Constants *****/
|
||||
|
||||
|
@ -9,4 +10,5 @@ extern const mp_obj_type_t breakout_bmp280_BreakoutBMP280_type;
|
|||
/***** Extern of Class Methods *****/
|
||||
extern void BreakoutBMP280_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind);
|
||||
extern mp_obj_t BreakoutBMP280_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args);
|
||||
extern mp_obj_t BreakoutBMP280_read(mp_obj_t self_in);
|
||||
extern mp_obj_t BreakoutBMP280_read(mp_obj_t self_in);
|
||||
extern mp_obj_t BreakoutBMP280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
|
Ładowanie…
Reference in New Issue