mirror of
https://github.com/m5stack/m5-docs.git
synced 2026-05-20 10:23:01 -07:00
update core2 touch api
This commit is contained in:
+199
-16
@@ -1,12 +1,201 @@
|
||||
# TOUCH
|
||||
|
||||
>This is the M5Stack Core2 touchscreen library, and you can use the APIs in this library to get information about touch interactions. You can use the library's API to get information about touch interactions, as well as listen for touch and gesture events and specify the appropriate handlers. The actual size of the touch screen is `320x280`, which covers the remaining 40px height of the printed red circle on the panel, except for the part that covers the screen, which can be controlled by the program to simulate physical keys.
|
||||
|
||||
## TouchButton
|
||||
|
||||
>TouchButton inherits from the TouchZone class, and is used by creating an instance button instance and calling the methods contained in the instance before use.
|
||||
|
||||
**Constructor:**
|
||||
|
||||
`TouchButton(uint16_t x_, uint16_t y_, uint16_t w_, uint16_t h_, const char* name_ = "");`
|
||||
|
||||
**Function: Creates rectangular key area instances**.
|
||||
|
||||
**Get Status:**
|
||||
|
||||
- Setting Key Status
|
||||
- `bool setState(bool);`
|
||||
|
||||
- button isPressed isPressed
|
||||
- `bool isPressed();`
|
||||
|
||||
- button isPressed isReleased
|
||||
- `bool isReleased();`
|
||||
|
||||
- button isPressed wasPressed
|
||||
- `bool wasPressed();`
|
||||
|
||||
- button isPressed wasReleased
|
||||
- `bool wasReleased();`
|
||||
|
||||
- button isPressed pressedFor
|
||||
- `bool pressedFor(uint32_t ms);`
|
||||
|
||||
- button isPressed pressedFor
|
||||
- `bool pressedFor(uint32_t ms, uint32_t continuous_time);`
|
||||
|
||||
- button isPressed releasedFor
|
||||
- `bool releasedFor(uint32_t ms);`
|
||||
|
||||
- button isPressed wasReleasefor
|
||||
- `bool wasReleasefor(uint32_t ms);`
|
||||
|
||||
**Get attributes:**
|
||||
|
||||
- `int32_t lastChange();`
|
||||
|
||||
- `uint8_t finger;`
|
||||
|
||||
- `bool changed;`
|
||||
|
||||
- `char name[16];`
|
||||
|
||||
**Event Listening:**
|
||||
|
||||
- Add key touch handling events and set the type of trigger event.
|
||||
- `void addHandler(void (*fn)(TouchEvent&), uint16_t eventMask = TE_ALL);`
|
||||
|
||||
- Event Types
|
||||
|
||||
```
|
||||
#define NUM_EVENTS 8
|
||||
#define TE_TOUCH 0x0001
|
||||
#define TE_RELEASE 0x0002
|
||||
#define TE_MOVE 0x0004
|
||||
#define TE_GESTURE 0x0008
|
||||
#define TE_TAP 0x0010
|
||||
#define TE_DBLTAP 0x0020
|
||||
#define TE_DRAGGED 0x0040
|
||||
#define TE_PRESSED 0x0080
|
||||
#define TE_ALL 0x0FFF
|
||||
#define TE_BTNONLY 0x1000
|
||||
|
||||
```
|
||||
|
||||
**Example**
|
||||
|
||||
```arduino
|
||||
#include <M5Core2.h>
|
||||
|
||||
TouchButton lt = TouchButton(0, 0, 160, 120, "left-top");
|
||||
TouchButton lb = TouchButton(0, 120, 160, 120, "left-bottom");
|
||||
TouchButton rt = TouchButton(160, 0, 160, 120, "right-top");
|
||||
TouchButton rb = TouchButton(160, 120, 160, 120, "right-bottom");
|
||||
|
||||
void colorButtons(TouchEvent& e) {
|
||||
TouchButton& b = *e.button;
|
||||
M5.Lcd.fillRect(b.x, b.y, b.w, b.h, b.isPressed() ? WHITE : BLACK);
|
||||
}
|
||||
|
||||
void dblTapped(TouchEvent& e) {
|
||||
Serial.println("--- TOP RIGHT BUTTON WAS DOUBLETAPPED ---");
|
||||
}
|
||||
|
||||
void setup() {
|
||||
M5.begin();
|
||||
M5.Touch.addHandler(colorButtons, TE_BTNONLY + TE_TOUCH + TE_RELEASE);
|
||||
rt.addHandler(dblTapped, TE_DBLTAP);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
M5.update();
|
||||
}
|
||||
```
|
||||
|
||||
## Gesture
|
||||
|
||||
>The Gesture class supports passing in two TouchButton regions to create touch gesture objects and gesture names. Create post-trigger handle functions with `addHandler`, which is triggered when moving from area 1 to area 2 and matching the gesture configuration.
|
||||
|
||||
**Constructor:**
|
||||
|
||||
`Gesture(TouchZone fromZone_, TouchZone toZone_, const char* name_ = "", uint16_t maxTime_ = GESTURE_MAXTIME, uint16_t minDistance_ = GESTURE_MINDIST);`
|
||||
|
||||
**Function: Creates rectangular key area instances**.
|
||||
|
||||
**Example**
|
||||
|
||||
```arduino
|
||||
#include <M5Core2.h>
|
||||
|
||||
TouchZone topHalf(0,0,320,120);
|
||||
TouchZone bottomHalf(0,120,320,160);
|
||||
Gesture swipeDown(topHalf, bottomHalf, "Swipe Down");
|
||||
|
||||
void yayWeSwiped(TouchEvent& e) {
|
||||
Serial.println("--- SWIPE DOWN DETECTED ---");
|
||||
}
|
||||
|
||||
|
||||
void setup() {
|
||||
M5.begin();
|
||||
swipeDown.addHandler(yayWeSwiped);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
M5.update();
|
||||
}
|
||||
```
|
||||
|
||||
## update
|
||||
|
||||
>All touch state updates depend on `M5.update();`.
|
||||
|
||||
## TouchEvent Structures
|
||||
|
||||
>When the touch event is triggered, the handler function bound to the region using `addHandler` is automatically called, and the `TouchEvent construct` is passed in as a parameter.
|
||||
|
||||
```
|
||||
struct TouchEvent {
|
||||
uint8_t finger; //Touch point serial number, maximum support two points
|
||||
uint16_t type; //Event Types
|
||||
TouchPoint from; //Event initial touch point coordinates-->x,y
|
||||
TouchPoint to; //End of event touch point coordinates-->x,y
|
||||
uint16_t duration; //Event Duration
|
||||
TouchButton* button; //Event Trigger Object
|
||||
Gesture* gesture; //Event Trigger Gestures
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
**Example**
|
||||
|
||||
```
|
||||
#include <M5Core2.h>
|
||||
|
||||
TouchButton lt = TouchButton(0, 0, 160, 120, "left-top");
|
||||
TouchButton lb = TouchButton(0, 120, 160, 120, "left-bottom");
|
||||
TouchButton rt = TouchButton(160, 0, 160, 120, "right-top");
|
||||
TouchButton rb = TouchButton(160, 120, 160, 120, "right-bottom");
|
||||
|
||||
|
||||
void eventDisplay(TouchEvent& e) {
|
||||
Serial.printf("%-12s finger%d %-18s (%3d, %3d)", M5.Touch.eventTypeName(e), e.finger, M5.Touch.eventObjName(e), e.from.x, e.from.y);
|
||||
if (e.type != TE_TOUCH && e.type != TE_TAP && e.type != TE_DBLTAP) {
|
||||
Serial.printf("--> (%3d, %3d) %5d ms", e.to.x, e.to.y, e.duration);
|
||||
}
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
M5.begin();
|
||||
M5.Touch.addHandler(eventDisplay);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
M5.update();
|
||||
}
|
||||
```
|
||||
|
||||
## Touch
|
||||
|
||||
>With the initialization of `M5.begin();`, a Touch instance is generated, in which some information about the current screen's touch operations, such as coordinates, status, etc., can be retrieved.
|
||||
|
||||
## getPressPoint()
|
||||
|
||||
**Description**
|
||||
**Function: Get touch coordinates**
|
||||
|
||||
Get touch coordinates
|
||||
|
||||
**Syntax**
|
||||
**Function prototype:**
|
||||
|
||||
`TouchPoint_t getPressPoint();`
|
||||
|
||||
@@ -25,11 +214,9 @@ void loop() {
|
||||
```
|
||||
## ispressed()
|
||||
|
||||
**Description**
|
||||
**Function: Check if the screen is pressed**
|
||||
|
||||
Check that the screen is pressed
|
||||
|
||||
**Syntax**
|
||||
**Function prototype:**
|
||||
|
||||
`bool ispressed();`
|
||||
|
||||
@@ -51,11 +238,9 @@ void loop() {
|
||||
|
||||
## HotZone_t* createHotZone()
|
||||
|
||||
**Description**
|
||||
**Function: Create HotZone**
|
||||
|
||||
Create a touch hotzone
|
||||
|
||||
**Syntax**
|
||||
**Function prototype:**
|
||||
|
||||
`HotZone_t* creatHotZone(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, void (*fun)() = nullptr );`
|
||||
|
||||
@@ -83,11 +268,9 @@ void loop() {
|
||||
|
||||
## inHotZone()
|
||||
|
||||
**Description**
|
||||
**Function: Determine if in a hot zone**
|
||||
|
||||
Determine if it is in the hot zone
|
||||
|
||||
**Syntax**
|
||||
**Function prototype:**
|
||||
|
||||
`bool inHotZone(TouchPoint_t point);`
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
## Description
|
||||
|
||||
**BTC** is a M5 base that allows you sit your M5 core instead of laying them down or hang on the wall. BTC is not just a sit for holding the M5 core but also comes with serveral features like temperature and humiluty detection(by SHT30), and charging base.
|
||||
**BTC** is a M5 Base that allows you stand your M5 Core instead of laying them down or hang on the wall. BTC is not just a seat for holding the M5 Core but also comes with serveral features like temperature and humiluty detection (by SHT30), and charging base.
|
||||
|
||||
**Note:**
|
||||
|
||||
* Although M5Core [BASIC](https://docs.m5stack.com/#/en/core/basic) or [GRAY](https://docs.m5stack.com/#/en/core/gray) can be attached to this base, but BTC can not charge them. Actually, our Cores, as we know, are built in chargin chip (IP5306). After plugged a USB cable in, the Core was charging without any charger.
|
||||
- Although M5Stack [BASIC](https://docs.m5stack.com/#/en/core/basic) and [GRAY](https://docs.m5stack.com/#/en/core/gray) Core can be attached to the base, but BTC can not charge them. After plugging-in a USB cable, the Core is powering without any charger.
|
||||
|
||||
* Once M5Core has been attached to BTC, it can not controll ENV Unit at this time. Because BTC has been built in SHT30 sensor which will cause IIC address conflict.
|
||||
- Once M5Stack Core has been attached to BTC, it can not connect to an ENV Unit. This is to avoid I2C address conflict with built-in SHT30 sensor of BTC Base.
|
||||
|
||||
## Product Features
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ Choose the development platform you want to use, view the corresponding tutorial
|
||||
<a href="/#/en/quick_start/m5stickc_plus/m5stickc_plus_quick_start_with_uiflow"><el-tag effect="plain">UIFlow</el-tag></a>
|
||||
<a href="/#/en/arduino/arduino_development"><el-tag effect="plain">Arduino</el-tag></a>
|
||||
|
||||
?>M5StickC-Plus can use most programs of M5StickC. Due to hardware differences such as screens, please download the M5StickC-Plus library before compiling the program and modify the header file reference in the program as `M5StickCPlus.h`.
|
||||
?>**M5StickC-Plus can use most programs of M5StickC. Due to hardware differences such as screens, please download the M5StickC-Plus library before compiling the program and modify the header file reference in the program as `M5StickCPlus.h`.**
|
||||
|
||||
## Description
|
||||
|
||||
|
||||
@@ -1,5 +1,196 @@
|
||||
# TOUCH
|
||||
|
||||
>这是M5Stack Core2触摸屏库,你可以用该库中的API获取触摸交互信息。以及监听一些触控,手势事件并指定相应的处理程序.触摸屏幕的实际尺寸为`320x280`, 除去覆盖屏幕部分,剩余的40px高度覆盖到了面板上印有红色圆圈的位置,用户可以通过程序控制来模拟实体按键。
|
||||
|
||||
## TouchButton类
|
||||
|
||||
>TouchButton继承至TouchZone类, 使用前通过创建实例按键实例,调用实例中包含的方法,进行使用
|
||||
|
||||
**构造函数:**
|
||||
|
||||
`TouchButton(uint16_t x_, uint16_t y_, uint16_t w_, uint16_t h_, const char* name_ = "");`
|
||||
|
||||
**功能:创建矩形按键区域实例**
|
||||
|
||||
**获取状态:**
|
||||
|
||||
- 设置按键状态
|
||||
- `bool setState(bool);`
|
||||
|
||||
- 按键是否按下
|
||||
- `bool isPressed();`
|
||||
|
||||
- 按键是否释放
|
||||
- `bool isReleased();`
|
||||
|
||||
- 按键按下触发单次
|
||||
- `bool wasPressed();`
|
||||
|
||||
- 按键释放触发单次
|
||||
- `bool wasReleased();`
|
||||
|
||||
- 按键长按-指定时间
|
||||
- `bool pressedFor(uint32_t ms);`
|
||||
|
||||
- 按键长按-指定时间
|
||||
- `bool pressedFor(uint32_t ms, uint32_t continuous_time);`
|
||||
|
||||
- 按键释放-指定时间
|
||||
- `bool releasedFor(uint32_t ms);`
|
||||
|
||||
- 按键按下-指定时间
|
||||
- `bool wasReleasefor(uint32_t ms);`
|
||||
|
||||
**获取属性:**
|
||||
|
||||
- `int32_t lastChange();`
|
||||
|
||||
- `uint8_t finger;`
|
||||
|
||||
- `bool changed;`
|
||||
|
||||
- `char name[16];`
|
||||
|
||||
**事件监听:**
|
||||
|
||||
- 添加按键触摸处理事件,设置触发事件的类型
|
||||
- `void addHandler(void (*fn)(TouchEvent&), uint16_t eventMask = TE_ALL);`
|
||||
|
||||
- 事件类型
|
||||
|
||||
```
|
||||
#define NUM_EVENTS 8
|
||||
#define TE_TOUCH 0x0001
|
||||
#define TE_RELEASE 0x0002
|
||||
#define TE_MOVE 0x0004
|
||||
#define TE_GESTURE 0x0008
|
||||
#define TE_TAP 0x0010
|
||||
#define TE_DBLTAP 0x0020
|
||||
#define TE_DRAGGED 0x0040
|
||||
#define TE_PRESSED 0x0080
|
||||
#define TE_ALL 0x0FFF
|
||||
#define TE_BTNONLY 0x1000
|
||||
|
||||
```
|
||||
|
||||
**例程**
|
||||
|
||||
```arduino
|
||||
#include <M5Core2.h>
|
||||
|
||||
TouchButton lt = TouchButton(0, 0, 160, 120, "left-top");
|
||||
TouchButton lb = TouchButton(0, 120, 160, 120, "left-bottom");
|
||||
TouchButton rt = TouchButton(160, 0, 160, 120, "right-top");
|
||||
TouchButton rb = TouchButton(160, 120, 160, 120, "right-bottom");
|
||||
|
||||
void colorButtons(TouchEvent& e) {
|
||||
TouchButton& b = *e.button;
|
||||
M5.Lcd.fillRect(b.x, b.y, b.w, b.h, b.isPressed() ? WHITE : BLACK);
|
||||
}
|
||||
|
||||
void dblTapped(TouchEvent& e) {
|
||||
Serial.println("--- TOP RIGHT BUTTON WAS DOUBLETAPPED ---");
|
||||
}
|
||||
|
||||
void setup() {
|
||||
M5.begin();
|
||||
M5.Touch.addHandler(colorButtons, TE_BTNONLY + TE_TOUCH + TE_RELEASE);
|
||||
rt.addHandler(dblTapped, TE_DBLTAP);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
M5.update();
|
||||
}
|
||||
```
|
||||
|
||||
## Gesture类
|
||||
|
||||
>Gesture类支持传入两个TouchButton区域,创建触摸手势对象与手势名称。通过`addHandler`创建手势触发后的处理函数,当由区域1移动至区域2且符合手势配置时将触发处理函数。
|
||||
|
||||
**构造函数:**
|
||||
|
||||
`Gesture(TouchZone fromZone_, TouchZone toZone_, const char* name_ = "", uint16_t maxTime_ = GESTURE_MAXTIME, uint16_t minDistance_ = GESTURE_MINDIST);`
|
||||
|
||||
**功能:创建矩形按键区域实例**
|
||||
|
||||
**例程**
|
||||
|
||||
```arduino
|
||||
#include <M5Core2.h>
|
||||
|
||||
TouchZone topHalf(0,0,320,120);
|
||||
TouchZone bottomHalf(0,120,320,160);
|
||||
Gesture swipeDown(topHalf, bottomHalf, "Swipe Down");
|
||||
|
||||
void yayWeSwiped(TouchEvent& e) {
|
||||
Serial.println("--- SWIPE DOWN DETECTED ---");
|
||||
}
|
||||
|
||||
|
||||
void setup() {
|
||||
M5.begin();
|
||||
swipeDown.addHandler(yayWeSwiped);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
M5.update();
|
||||
}
|
||||
```
|
||||
|
||||
## update
|
||||
|
||||
>所有触摸状态的更新,都依赖于`M5.update();`
|
||||
|
||||
## TouchEvent结构体
|
||||
|
||||
>当触摸事件被触发时候,将会自动调用该区域使用`addHandler`所绑定的处理函数,同时将`TouchEvent结构体`作为参数进行传入。
|
||||
|
||||
```
|
||||
struct TouchEvent {
|
||||
uint8_t finger; //触摸点序号,最大支持两点
|
||||
uint16_t type; //事件类型
|
||||
TouchPoint from; //事件初始触摸点坐标-->x,y
|
||||
TouchPoint to; //事件结束触摸点坐标-->x,y
|
||||
uint16_t duration; //事件持续时间
|
||||
TouchButton* button; //事件触发对象
|
||||
Gesture* gesture; //事件触发手势
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
**例程**
|
||||
|
||||
```
|
||||
#include <M5Core2.h>
|
||||
|
||||
TouchButton lt = TouchButton(0, 0, 160, 120, "left-top");
|
||||
TouchButton lb = TouchButton(0, 120, 160, 120, "left-bottom");
|
||||
TouchButton rt = TouchButton(160, 0, 160, 120, "right-top");
|
||||
TouchButton rb = TouchButton(160, 120, 160, 120, "right-bottom");
|
||||
|
||||
|
||||
void eventDisplay(TouchEvent& e) {
|
||||
Serial.printf("%-12s finger%d %-18s (%3d, %3d)", M5.Touch.eventTypeName(e), e.finger, M5.Touch.eventObjName(e), e.from.x, e.from.y);
|
||||
if (e.type != TE_TOUCH && e.type != TE_TAP && e.type != TE_DBLTAP) {
|
||||
Serial.printf("--> (%3d, %3d) %5d ms", e.to.x, e.to.y, e.duration);
|
||||
}
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
M5.begin();
|
||||
M5.Touch.addHandler(eventDisplay);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
M5.update();
|
||||
}
|
||||
```
|
||||
|
||||
## Touch对象
|
||||
|
||||
>随着`M5.begin();`初始化,将会生成一个Touch实例,该实例中可以获取到当前屏幕的一些触摸操作信息,如坐标,状态等。
|
||||
|
||||
## getPressPoint()
|
||||
|
||||
**功能**
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<a href="/#/zh_CN/quick_start/m5stickc_plus/m5stickc_plus_quick_start_with_uiflow"><el-tag effect="plain">UIFlow</el-tag></a>
|
||||
<a href="/#/zh_CN/arduino/arduino_development"><el-tag effect="plain">Arduino</el-tag></a>
|
||||
|
||||
?>M5StickC-Plus能够使用M5StickC的大多数程序,由于屏幕等硬件区别,请在编译程序前下载M5StickC-Plus库,并修改程序中的头文件引用为`M5StickCPlus.h`。
|
||||
?>**M5StickC-Plus能够使用M5StickC的大多数程序,由于屏幕等硬件区别,请在编译程序前下载M5StickC-Plus库,并修改程序中的头文件引用为`M5StickCPlus.h`。**
|
||||
|
||||
## 描述
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
## 描述
|
||||
|
||||
**Timer Camera** 是一款基于ESP32的摄像头模块,集成ESP32芯片,板载8M PSRAM,采用300万像素的摄像头(OV3660)可视角66.5°,最高可实现拍摄1600 x 1200分辨率的照片,带有状态指示灯与RESET按键,主打超低功耗设计,通过RTC(BM8563)可实现定时休眠与唤醒,休眠后电流仅2μA,板上预留电池接口,用户可自行接入电池供电。模块支持WiFi图像传输和USB端口调试,底部HY2.0-4P端口输出,可连接其他外设。通过M5Burner烧录固件,可直接使用Camera-Tool对Timer Camera进行设置,也可在UIFlow中对Timer Camera数据进行处理。
|
||||
**Timer Camera** 是一款基于ESP32-D0WDQ6-V3的摄像头模块,板载8M PSRAM,采用300万像素的摄像头(OV3660)可视角66.5°,最高可实现拍摄1600 x 1200分辨率的照片,带有状态指示灯与RESET按键,主打超低功耗设计,通过RTC(BM8563)可实现定时休眠与唤醒,休眠后电流仅2μA,板上预留电池接口,用户可自行接入电池供电。模块支持WiFi图像传输和USB端口调试,底部HY2.0-4P端口输出,可连接其他外设。通过M5Burner烧录固件,可直接使用Camera-Tool对Timer Camera进行设置,也可在UIFlow中对Timer Camera数据进行处理。
|
||||
|
||||
## 产品特性
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
## 相关链接
|
||||
|
||||
- **数据手册**
|
||||
- [ESP32](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/esp32_datasheet_cn.pdf)
|
||||
- [ESP32-D0WDQ6-V3](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/esp32_datasheet_cn.pdf)
|
||||
- [OV3660](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/unit/OV3660_CSP3_DS_1.3_sida.pdf)
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
## 描述
|
||||
|
||||
**Timer Camera X** 是一款基于ESP32的摄像头模块,集成ESP32芯片,板载8M PSRAM,采用300万像素的摄像头(OV3660)可视角66.5°,最高可实现拍摄1600 x 1200分辨率的照片,内置140mAh电池与LED状态指示灯,在指示灯下方有一颗隐藏的reset按键,该摄像头主打超低功耗设计,通过RTC(BM8563)可实现定时休眠与唤醒,休眠后电流仅2μA,开启定时拍照(每小时一张)后,电池可支持连续工作一个月以上。模块支持WiFi图像传输和USB端口调试,底部HY2.0-4P端口输出,可连接其他外设。通过M5Burner烧录固件,可直接使用Camera-Tool对Timer Camera X进行设置,也可在UIFlow中对Timer Camera X数据进行处理。
|
||||
**Timer Camera X** 是一款基于ESP32-D0WDQ6-V3的摄像头模块,板载8M PSRAM,采用300万像素的摄像头(OV3660)可视角66.5°,最高可实现拍摄1600 x 1200分辨率的照片,内置140mAh电池与LED状态指示灯,在指示灯下方有一颗的复位按键,方便开发调试。该摄像头主打超低功耗设计,通过RTC(BM8563)可实现定时休眠与唤醒,休眠后电流仅2μA,开启定时拍照(每小时一张)后,电池可支持连续工作一个月以上。模块支持WiFi图像传输和USB端口调试,底部HY2.0-4P端口输出,可连接其他外设。通过M5Burner烧录固件,可直接使用Camera-Tool对Timer Camera X进行设置,也可在UIFlow中对Timer Camera X数据进行处理。
|
||||
|
||||
## 产品特性
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
## 相关链接
|
||||
|
||||
- **数据手册**
|
||||
- [ESP32](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/esp32_datasheet_cn.pdf)
|
||||
- [ESP32-D0WDQ6-V3](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/esp32_datasheet_cn.pdf)
|
||||
- [OV3660](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/unit/OV3660_CSP3_DS_1.3_sida.pdf)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user