This commit is contained in:
watson8544
2018-12-25 16:04:58 +08:00
parent d796b3d8aa
commit ab0a1f5ec9
265 changed files with 15685 additions and 15662 deletions
+42 -42
View File
@@ -1,42 +1,42 @@
module.exports = {
"env": {
"browser" : true,
"commonjs": true,
"es6" : true,
"node" : true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 6,
"sourceType" : "module"
},
"plugins": [
"html"
],
"rules": {
"array-bracket-spacing" : ["error", "never"],
"array-callback-return" : ["error"],
"block-scoped-var" : ["error"],
"block-spacing" : ["error", "always"],
"curly" : ["error"],
"dot-notation" : ["error"],
"eqeqeq" : ["error"],
"indent" : ["error", 4],
"linebreak-style" : ["error", "unix"],
"no-console" : ["warn"],
"no-floating-decimal" : ["error"],
"no-implicit-coercion" : ["error"],
"no-implicit-globals" : ["error"],
"no-loop-func" : ["error"],
"no-return-assign" : ["error"],
"no-template-curly-in-string": ["error"],
"no-unneeded-ternary" : ["error"],
"no-unused-vars" : ["error", { "args": "none" }],
"no-useless-computed-key" : ["error"],
"no-useless-return" : ["error"],
"no-var" : ["error"],
"prefer-const" : ["error"],
"quotes" : ["error", "single"],
"semi" : ["error", "always"]
}
};
module.exports = {
"env": {
"browser" : true,
"commonjs": true,
"es6" : true,
"node" : true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 6,
"sourceType" : "module"
},
"plugins": [
"html"
],
"rules": {
"array-bracket-spacing" : ["error", "never"],
"array-callback-return" : ["error"],
"block-scoped-var" : ["error"],
"block-spacing" : ["error", "always"],
"curly" : ["error"],
"dot-notation" : ["error"],
"eqeqeq" : ["error"],
"indent" : ["error", 4],
"linebreak-style" : ["error", "unix"],
"no-console" : ["warn"],
"no-floating-decimal" : ["error"],
"no-implicit-coercion" : ["error"],
"no-implicit-globals" : ["error"],
"no-loop-func" : ["error"],
"no-return-assign" : ["error"],
"no-template-curly-in-string": ["error"],
"no-unneeded-ternary" : ["error"],
"no-unused-vars" : ["error", { "args": "none" }],
"no-useless-computed-key" : ["error"],
"no-useless-return" : ["error"],
"no-var" : ["error"],
"prefer-const" : ["error"],
"quotes" : ["error", "single"],
"semi" : ["error", "always"]
}
};
+15 -15
View File
@@ -1,15 +1,15 @@
# Folders
build
coverage
dist
node_modules
.vscode
# Files
*.log
# OS
._*
.cache
.DS_Store
*.mp4
# Folders
build
coverage
dist
node_modules
.vscode
# Files
*.log
# OS
._*
.cache
.DS_Store
*.mp4
+21 -21
View File
@@ -1,21 +1,21 @@
MIT License
Copyright (c) 2018 John Hildenbiddle
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT License
Copyright (c) 2018 John Hildenbiddle
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+23 -23
View File
@@ -1,23 +1,23 @@
# M5Stack
[中文](https://github.com/watson8544/m5stack-documentation/tree/master/docs/zh_CN/README_zh_CN.md) | English | [日本語](https://github.com/watson8544/m5stack-documentation/tree/master/docs/ja/README_ja.md)
**Welcome to M5Stack Documents!**
## Introduction
**M5 stack is a modular stackable development device. The M stands for Modular and 5 stands for the the units compact 5 x 5 cm size.**
**The M5 stack aims to take the pain out of developing your new inventions and ideas. M5 stack comes packed with sensors, wifi, bluetooth, a screen and its own power supply which avoids the inconvenience of messy wires strewn across breadboards and adding new functionality is as simple as stacking it on top of one of the many expansion modules or plugging in a unit via the handy grove connectors.**
Our a series of core boards are based on **ESP32** chip.
Our aim is "**Stackable Board is Product**". Here's the [Official Website](http://www.m5stack.com)
## Contact & Support
- :computer: Visit [Official Website](http://www.m5stack.com) for newest product
- :busts_in_silhouette: Sign in our [Forum](http://forum.m5stack.com) for more designs with M5Stack
- :mailbox_with_mail: If you have any questions, you can contact us by Email <tech@m5stack.com>
- :convenience_store: If you want to get our products, access our [store](http://www.aliexpress.com/store/all-wholesale-products/3226069.html?spm=2114.12010108.100004.3.7e3a5379KoyhDo)
# M5Stack
[中文](https://github.com/watson8544/m5stack-documentation/tree/master/docs/zh_CN/README_zh_CN.md) | English | [日本語](https://github.com/watson8544/m5stack-documentation/tree/master/docs/ja/README_ja.md)
**Welcome to M5Stack Documents!**
## Introduction
**M5 stack is a modular stackable development device. The M stands for Modular and 5 stands for the the units compact 5 x 5 cm size.**
**The M5 stack aims to take the pain out of developing your new inventions and ideas. M5 stack comes packed with sensors, wifi, bluetooth, a screen and its own power supply which avoids the inconvenience of messy wires strewn across breadboards and adding new functionality is as simple as stacking it on top of one of the many expansion modules or plugging in a unit via the handy grove connectors.**
Our a series of core boards are based on **ESP32** chip.
Our aim is "**Stackable Board is Product**". Here's the [Official Website](http://www.m5stack.com)
## Contact & Support
- :computer: Visit [Official Website](http://www.m5stack.com) for newest product
- :busts_in_silhouette: Sign in our [Forum](http://forum.m5stack.com) for more designs with M5Stack
- :mailbox_with_mail: If you have any questions, you can contact us by Email <tech@m5stack.com>
- :convenience_store: If you want to get our products, access our [store](http://www.aliexpress.com/store/all-wholesale-products/3226069.html?spm=2114.12010108.100004.3.7e3a5379KoyhDo)
+3 -3
View File
@@ -1,4 +1,4 @@
/* /index.html 200
# Redirect default Netlify subdomain to primary domain
/* /index.html 200
# Redirect default Netlify subdomain to primary domain
http://m5-docs.netlify.com/* http://docs.m5stack.com/:splat 301!
+48 -48
View File
@@ -1,48 +1,48 @@
:root {--theme-color: hsl(204, 90%, 45%);}
.markdown-section a {
color: var(--theme-color,#42b983);
}
.markdown-section iframe[src*="buttons.github.io"] {
margin: 0;
}
figure.thumbnails img {
margin: 0.75em 0;
border-radius: 3px;
box-shadow: 0 2px 6px rgba(0,0,0,0.1), 0 4px 12px rgba(0,0,0,0.15);
}
@media (min-width: 30em) {
figure.thumbnails:after {
content: "";
display: table;
clear: both;
}
figure.thumbnails img {
float: left;
width: calc(50% - 0.75em);
}
figure.thumbnails img:nth-child(even) {
margin-left: 1.5em;
}
@supports (display: flex) {
figure.thumbnails {
display: flex;
align-items: center;
}
figure.thumbnails img {
flex-grow: 1;
width: 0;
}
figure.thumbnails img + img {
margin: 0 0 0 1.5em;
}
}
}
:root {--theme-color: hsl(204, 90%, 45%);}
.markdown-section a {
color: var(--theme-color,#42b983);
}
.markdown-section iframe[src*="buttons.github.io"] {
margin: 0;
}
figure.thumbnails img {
margin: 0.75em 0;
border-radius: 3px;
box-shadow: 0 2px 6px rgba(0,0,0,0.1), 0 4px 12px rgba(0,0,0,0.15);
}
@media (min-width: 30em) {
figure.thumbnails:after {
content: "";
display: table;
clear: both;
}
figure.thumbnails img {
float: left;
width: calc(50% - 0.75em);
}
figure.thumbnails img:nth-child(even) {
margin-left: 1.5em;
}
@supports (display: flex) {
figure.thumbnails {
display: flex;
align-items: center;
}
figure.thumbnails img {
flex-grow: 1;
width: 0;
}
figure.thumbnails img + img {
margin: 0 0 0 1.5em;
}
}
}
+14 -14
View File
@@ -1,15 +1,15 @@
module.exports = {
"parserOptions": {
"ecmaVersion": 5,
"sourceType": "script"
},
"env": {
"commonjs": false,
"es6" : false,
"node" : false
},
"rules": {
"no-var" : "off",
"prefer-const": "off"
}
module.exports = {
"parserOptions": {
"ecmaVersion": 5,
"sourceType": "script"
},
"env": {
"commonjs": false,
"es6" : false,
"node" : false
},
"rules": {
"no-var" : "off",
"prefer-const": "off"
}
}
+121 -121
View File
@@ -1,121 +1,121 @@
(function() {
// Functions
// =========================================================================
/**
* Adds event listeners to change active stylesheet and restore previously
* activated stylesheet on reload.
*
* @example
*
* This link:
* <a href="#" data-link-title="Foo">Foo</a>
* Will active this existing link:
* <link rel="stylesheet alternate" title="Foo" href="..." >
*
* @example
*
* This link:
* <a href="#" data-link-href="path/to/file.css">Bar</a>
* Will activate this existing link:
* <link rel="stylesheet alternate" title="[someID]" href="path/to/file.css" >
* Or generate this active link:
* <link rel="stylesheet" title="Bar" href="path/to/file.css" >
*/
function initStyleSwitcher() {
var isInitialzed = false;
var sessionStorageKey = 'activeStylesheetHref';
function handleSwitch(activeHref, activeTitle) {
var activeElm = document.querySelector('link[href*="' + activeHref +'"],link[title="' + activeTitle +'"]');
if (!activeElm && activeHref) {
activeElm = document.createElement('link');
activeElm.setAttribute('href', activeHref);
activeElm.setAttribute('rel', 'stylesheet');
activeElm.setAttribute('title', activeTitle);
document.head.appendChild(activeElm);
activeElm.addEventListener('load', function linkOnLoad() {
activeElm.removeEventListener('load', linkOnLoad);
setActiveLink(activeElm);
});
}
else if (activeElm) {
setActiveLink(activeElm);
}
}
function setActiveLink(activeElm) {
var activeHref = activeElm.getAttribute('href');
var activeTitle = activeElm.getAttribute('title');
var inactiveElms = document.querySelectorAll('link[title]:not([href*="' + activeHref +'"]):not([title="' + activeTitle +'"])');
// Remove "alternate" keyword
activeElm.setAttribute('rel', (activeElm.rel || '').replace(/\s*alternate/g, '').trim());
// Force enable stylesheet (required for some browsers)
activeElm.disabled = true;
activeElm.disabled = false;
// Store active style sheet
sessionStorage.setItem(sessionStorageKey, activeHref);
// Disable other elms
for (var i = 0; i < inactiveElms.length; i++) {
var elm = inactiveElms[i];
elm.disabled = true;
// Fix for browsersync and alternate stylesheet updates. Will
// cause FOUC when switching stylesheets during development, but
// required to properly apply style updates when alternate
// stylesheets are enabled.
if (window.browsersyncObserver) {
var linkRel = elm.getAttribute('rel') || '';
var linkRelAlt = linkRel.indexOf('alternate') > -1 ? linkRel : (linkRel + ' alternate').trim();
elm.setAttribute('rel', linkRelAlt);
}
}
// CSS custom property ponyfil
if ((window.$docsify || {}).themeable) {
window.$docsify.themeable.util.cssVars();
}
}
// Event listeners
if (!isInitialzed) {
isInitialzed = true;
// Restore active stylesheet
document.addEventListener('DOMContentLoaded', function() {
var activeHref = sessionStorage.getItem(sessionStorageKey);
if (activeHref) {
handleSwitch(activeHref);
}
});
// Update active stylesheet
document.addEventListener('click', function(evt) {
var dataHref = evt.target.getAttribute('data-link-href');
var dataTitle = evt.target.getAttribute('data-link-title')
if (dataHref || dataTitle) {
dataTitle = dataTitle
|| evt.target.textContent
|| '_' + Math.random().toString(36).substr(2, 9); // UID
handleSwitch(dataHref, dataTitle);
evt.preventDefault();
}
});
}
}
// Main
// =========================================================================
initStyleSwitcher();
})();
(function() {
// Functions
// =========================================================================
/**
* Adds event listeners to change active stylesheet and restore previously
* activated stylesheet on reload.
*
* @example
*
* This link:
* <a href="#" data-link-title="Foo">Foo</a>
* Will active this existing link:
* <link rel="stylesheet alternate" title="Foo" href="..." >
*
* @example
*
* This link:
* <a href="#" data-link-href="path/to/file.css">Bar</a>
* Will activate this existing link:
* <link rel="stylesheet alternate" title="[someID]" href="path/to/file.css" >
* Or generate this active link:
* <link rel="stylesheet" title="Bar" href="path/to/file.css" >
*/
function initStyleSwitcher() {
var isInitialzed = false;
var sessionStorageKey = 'activeStylesheetHref';
function handleSwitch(activeHref, activeTitle) {
var activeElm = document.querySelector('link[href*="' + activeHref +'"],link[title="' + activeTitle +'"]');
if (!activeElm && activeHref) {
activeElm = document.createElement('link');
activeElm.setAttribute('href', activeHref);
activeElm.setAttribute('rel', 'stylesheet');
activeElm.setAttribute('title', activeTitle);
document.head.appendChild(activeElm);
activeElm.addEventListener('load', function linkOnLoad() {
activeElm.removeEventListener('load', linkOnLoad);
setActiveLink(activeElm);
});
}
else if (activeElm) {
setActiveLink(activeElm);
}
}
function setActiveLink(activeElm) {
var activeHref = activeElm.getAttribute('href');
var activeTitle = activeElm.getAttribute('title');
var inactiveElms = document.querySelectorAll('link[title]:not([href*="' + activeHref +'"]):not([title="' + activeTitle +'"])');
// Remove "alternate" keyword
activeElm.setAttribute('rel', (activeElm.rel || '').replace(/\s*alternate/g, '').trim());
// Force enable stylesheet (required for some browsers)
activeElm.disabled = true;
activeElm.disabled = false;
// Store active style sheet
sessionStorage.setItem(sessionStorageKey, activeHref);
// Disable other elms
for (var i = 0; i < inactiveElms.length; i++) {
var elm = inactiveElms[i];
elm.disabled = true;
// Fix for browsersync and alternate stylesheet updates. Will
// cause FOUC when switching stylesheets during development, but
// required to properly apply style updates when alternate
// stylesheets are enabled.
if (window.browsersyncObserver) {
var linkRel = elm.getAttribute('rel') || '';
var linkRelAlt = linkRel.indexOf('alternate') > -1 ? linkRel : (linkRel + ' alternate').trim();
elm.setAttribute('rel', linkRelAlt);
}
}
// CSS custom property ponyfil
if ((window.$docsify || {}).themeable) {
window.$docsify.themeable.util.cssVars();
}
}
// Event listeners
if (!isInitialzed) {
isInitialzed = true;
// Restore active stylesheet
document.addEventListener('DOMContentLoaded', function() {
var activeHref = sessionStorage.getItem(sessionStorageKey);
if (activeHref) {
handleSwitch(activeHref);
}
});
// Update active stylesheet
document.addEventListener('click', function(evt) {
var dataHref = evt.target.getAttribute('data-link-href');
var dataTitle = evt.target.getAttribute('data-link-title')
if (dataHref || dataTitle) {
dataTitle = dataTitle
|| evt.target.textContent
|| '_' + Math.random().toString(36).substr(2, 9); // UID
handleSwitch(dataHref, dataTitle);
evt.preventDefault();
}
});
}
}
// Main
// =========================================================================
initStyleSwitcher();
})();
+393 -393
View File
File diff suppressed because it is too large Load Diff
+11 -11
View File
@@ -1,11 +1,11 @@
<img src="assets/img/coverpage_logo.png" width="146px">
> A documentation for [M5Stack](https://www.m5stack.com)
- A series of modular stackable development devices integrating WIFI/BLE
- For Industry Development/STEM Education
- Programming with UiFlow(Blockly/MicroPython)
[Official Website](http://www.m5stack.com)
[Introdction](#main)
[Quick Start](/en/quick_start)
<img src="assets/img/coverpage_logo.png" width="146px">
> A documentation for [M5Stack](https://www.m5stack.com)
- A series of modular stackable development devices integrating WIFI/BLE
- For Industry Development/STEM Education
- Programming with UiFlow(Blockly/MicroPython)
[Official Website](http://www.m5stack.com)
[Introdction](#main)
[Quick Start](/en/quick_start)
+17 -17
View File
@@ -1,18 +1,18 @@
# LEGO Cable
## Description
<mark>LEGO Cable</mark>is designed for connecting GRVOE interface and LEGO, particularly, using for connecting M5Core and LEGO.
## Feature
- 3 specifications: 10cm, 20cm, 30cm
## Related Link
<!-- - **[Example](en/file_to_display_null)** -->
- **[Purchase](https://www.aliexpress.com/store/product/M5Stack-M5Bala-ESP32-6Pin-10-20/3226069_32923086380.html)**
<figure>
<img src="assets/img/product_pics/accessory/lego_cable_01.jpg" alt="lego_cable_01" width="300px" height="300px">
# LEGO Cable
## Description
<mark>LEGO Cable</mark>is designed for connecting GRVOE interface and LEGO, particularly, using for connecting M5Core and LEGO.
## Feature
- 3 specifications: 10cm, 20cm, 30cm
## Related Link
<!-- - **[Example](en/file_to_display_null)** -->
- **[Purchase](https://www.aliexpress.com/store/product/M5Stack-M5Bala-ESP32-6Pin-10-20/3226069_32923086380.html)**
<figure>
<img src="assets/img/product_pics/accessory/lego_cable_01.jpg" alt="lego_cable_01" width="300px" height="300px">
</figure>
+21 -21
View File
@@ -1,22 +1,22 @@
# Frame
## Description
<mark>Frame</mark>is designed as a fixed frame for M5Core.
## Related Link
- [Purchase](https://www.aliexpress.com/store/product/M5Stack-2/3226069_32874948519.html)
<figure>
<img src="assets/img/product_pics/accessory/frame_01.jpg" alt="frame_01" width="300px" height="300px">
</figure>
<figure>
<img src="assets/img/product_pics/accessory/frame_02.jpg" alt="frame_02" width="300px" height="300px">
</figure>
<figure>
<img src="assets/img/product_pics/accessory/frame_03.jpg" alt="frame_03" width="300px" height="300px">
</figure>
<figure>
<img src="assets/img/product_pics/accessory/frame_04.jpg" alt="frame_04" width="300px" height="300px">
# Frame
## Description
<mark>Frame</mark>is designed as a fixed frame for M5Core.
## Related Link
- [Purchase](https://www.aliexpress.com/store/product/M5Stack-2/3226069_32874948519.html)
<figure>
<img src="assets/img/product_pics/accessory/frame_01.jpg" alt="frame_01" width="300px" height="300px">
</figure>
<figure>
<img src="assets/img/product_pics/accessory/frame_02.jpg" alt="frame_02" width="300px" height="300px">
</figure>
<figure>
<img src="assets/img/product_pics/accessory/frame_03.jpg" alt="frame_03" width="300px" height="300px">
</figure>
<figure>
<img src="assets/img/product_pics/accessory/frame_04.jpg" alt="frame_04" width="300px" height="300px">
</figure>
+3 -3
View File
@@ -1,3 +1,3 @@
# Headers Socket
## (coming soom...)
# Headers Socket
## (coming soom...)
+10 -10
View File
@@ -1,10 +1,10 @@
# API Reference
| MicroPython | Arduino |
|:------------|:--------|
|[LCD](en/api_reference/micropython/api_lcd) | / |
<!-- ## [LCD](en/api_reference/micropython/api_lcd) -->
<!-- ## [Peripherals](en/api_reference/peripherals/api_gpio)
### 1. [GPIO](en/api_reference/peripherals/api_gpio)
## [Speaker](en/api_reference/api_speaker) -->
# API Reference
| MicroPython | Arduino |
|:------------|:--------|
|[LCD](en/api_reference/micropython/api_lcd) | / |
<!-- ## [LCD](en/api_reference/micropython/api_lcd) -->
<!-- ## [Peripherals](en/api_reference/peripherals/api_gpio)
### 1. [GPIO](en/api_reference/peripherals/api_gpio)
## [Speaker](en/api_reference/api_speaker) -->
+20 -20
View File
@@ -1,21 +1,21 @@
# GPIO
*Refer to GPIO API of [Arduino](http://www.arduino.cc)*
### <mark>digitalRead</mark>
> uint32 digitalRead(uint8 pin);
Read the value of `pin`
| Param | Type | Description |
| --- | --- | --- |
| pin | <code>uint8</code> | the number of pin |
Return:
digital level(0/1)
**Example**
```c++
uint32_t pin21_data;
pin21_data = digitalRead(21);
# GPIO
*Refer to GPIO API of [Arduino](http://www.arduino.cc)*
### <mark>digitalRead</mark>
> uint32 digitalRead(uint8 pin);
Read the value of `pin`
| Param | Type | Description |
| --- | --- | --- |
| pin | <code>uint8</code> | the number of pin |
Return:
digital level(0/1)
**Example**
```c++
uint32_t pin21_data;
pin21_data = digitalRead(21);
```
+205 -205
View File
@@ -1,205 +1,205 @@
# LCD
### <mark>lcd.setRotation(degree)</mark>
**Example**
```python
lcd.setRotation(90)
```
**Set the angle of rotation of the entire screen.**
| Param | Description |
| --- | --- |
| degree | the angle of setRotation |
* * *
### <mark>lcd.setColor(color [, background_color])</mark>
**Example**
```python
lcd.setColor(lcd.RED)
lcd.setColor(lcd.ORANGE, lcd.DARKCYAN)
```
**Set the default foreground/background color of text.**
| Param | Description |
| --- | --- |
| color | the color of text |
| background_color| the fill color of text |
* * *
### <mark>lcd.fillScreen(color)</mark>
**Example**
```python
lcd.fillScreen(lcd.RED)
```
**Fill the entire screen with the given color.**
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawPixel(x, y [,color])</mark>
**Example**
```python
lcd.drawPixel(22,22,lcd.RED)
```
**Draw the pixel at position (x,y)**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawLine(x, y, x1, y1 [,color])</mark>
**Example**
```python
lcd.drawLine(0,0,12,12,lcd.WHITE)
```
**Draw the line from point (x,y) to point (x1,y1)**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawTriangle(x, y, x1, y1, x2, y2 [,color])</mark>
**Example**
```python
lcd.drawTriangle(22,22,69,98,51,22,lcd.RED)
```
**Draw the triangel between points (x,y), (x1,y1) and (x2,y2).**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.fillTriangle(x, y, x1, y1, x2, y2 [,color])</mark>
**Example**
```python
lcd.fillTriangle(122, 122, 169, 198, 151, 182, lcd.RED)
```
**Fill the triangel between points (x,y), (x1,y1) and (x2,y2).**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawRect(x, y, w, h, [,color])</mark>
**Example**
```python
lcd.drawRect(180, 12, 122, 10, lcd.BLUE)
```
**Draw the rectangle from the upper left point at (x,y) and width and height.**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| w | display phisical width in pixels (displays smaller dimension) |
| h | display phisical height in pixels (displays larger dimension) |
| color | color value |
* * *
### <mark>lcd.drawRoundRect(x, y, w, h, r [,color])</mark>
**Example**
```python
lcd.fillRoundRect(180,70,122,10,4,lcd.BLUE)
```
**Draw the rectangle with rounded corners from the upper left point at (x,y) and width and height. Corner radius is given by r argument.**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| w | display phisical width in pixels (displays smaller dimension) |
| h | display phisical height in pixels (displays larger dimension) |
| r | the radius of circle |
| color | color value |
* * *
### <mark>lcd.print(text, [x, y])</mark>
**Example**
```python
lcd.print('this is a print text function', 80, 80)
```
**Print the text at position (x,y).**
| Param | Description |
| --- | --- |
| text | the string need to print |
* * *
### <mark>lcd.clear([color])</mark>
**Example**
```python
lcd.clear()
```
**Clear the screen with default background color orspecific color if given.**
* * *
### Usage
```python
from machine import SPI, Pin
from display import LCD
spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
lcd = LCD(spi = spi) #lcd init
lcd.fillScreen(lcd.BLACK) #set the default background color
lcd.drawLine(0, 0, lcd.WHITE)
lcd.drawTriangle(22, 22, 69, 98, 51, 22, lcd.RED)
lcd.fillTriangle(122, 122, 169, 198, 151, 182, lcd.RED)
lcd.drawCircle(180, 180, 10, lcd.BLUE)
lcd.fillcircle(100, 100, 10, lcd.BLUE)
lcd.drawRect(180, 12, 122, 10, lcd.BLUE)
lcd.fillRect(180, 30, 122, 10, lcd.BLUE)
lcd.drawRoundRect(180, 50, 122, 10, 4, lcd.BLUE)
lcd.fillRoundRect(180, 70, 122, 10, 4, lcd.BLUE)
lcd.print('this is a print text function', 80, 80)
```
# LCD
### <mark>lcd.setRotation(degree)</mark>
**Example**
```python
lcd.setRotation(90)
```
**Set the angle of rotation of the entire screen.**
| Param | Description |
| --- | --- |
| degree | the angle of setRotation |
* * *
### <mark>lcd.setColor(color [, background_color])</mark>
**Example**
```python
lcd.setColor(lcd.RED)
lcd.setColor(lcd.ORANGE, lcd.DARKCYAN)
```
**Set the default foreground/background color of text.**
| Param | Description |
| --- | --- |
| color | the color of text |
| background_color| the fill color of text |
* * *
### <mark>lcd.fillScreen(color)</mark>
**Example**
```python
lcd.fillScreen(lcd.RED)
```
**Fill the entire screen with the given color.**
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawPixel(x, y [,color])</mark>
**Example**
```python
lcd.drawPixel(22,22,lcd.RED)
```
**Draw the pixel at position (x,y)**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawLine(x, y, x1, y1 [,color])</mark>
**Example**
```python
lcd.drawLine(0,0,12,12,lcd.WHITE)
```
**Draw the line from point (x,y) to point (x1,y1)**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawTriangle(x, y, x1, y1, x2, y2 [,color])</mark>
**Example**
```python
lcd.drawTriangle(22,22,69,98,51,22,lcd.RED)
```
**Draw the triangel between points (x,y), (x1,y1) and (x2,y2).**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.fillTriangle(x, y, x1, y1, x2, y2 [,color])</mark>
**Example**
```python
lcd.fillTriangle(122, 122, 169, 198, 151, 182, lcd.RED)
```
**Fill the triangel between points (x,y), (x1,y1) and (x2,y2).**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| color | color value |
* * *
### <mark>lcd.drawRect(x, y, w, h, [,color])</mark>
**Example**
```python
lcd.drawRect(180, 12, 122, 10, lcd.BLUE)
```
**Draw the rectangle from the upper left point at (x,y) and width and height.**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| w | display phisical width in pixels (displays smaller dimension) |
| h | display phisical height in pixels (displays larger dimension) |
| color | color value |
* * *
### <mark>lcd.drawRoundRect(x, y, w, h, r [,color])</mark>
**Example**
```python
lcd.fillRoundRect(180,70,122,10,4,lcd.BLUE)
```
**Draw the rectangle with rounded corners from the upper left point at (x,y) and width and height. Corner radius is given by r argument.**
*If color is not given, current foreground color is used*
| Param | Description |
| --- | --- |
| w | display phisical width in pixels (displays smaller dimension) |
| h | display phisical height in pixels (displays larger dimension) |
| r | the radius of circle |
| color | color value |
* * *
### <mark>lcd.print(text, [x, y])</mark>
**Example**
```python
lcd.print('this is a print text function', 80, 80)
```
**Print the text at position (x,y).**
| Param | Description |
| --- | --- |
| text | the string need to print |
* * *
### <mark>lcd.clear([color])</mark>
**Example**
```python
lcd.clear()
```
**Clear the screen with default background color orspecific color if given.**
* * *
### Usage
```python
from machine import SPI, Pin
from display import LCD
spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
lcd = LCD(spi = spi) #lcd init
lcd.fillScreen(lcd.BLACK) #set the default background color
lcd.drawLine(0, 0, lcd.WHITE)
lcd.drawTriangle(22, 22, 69, 98, 51, 22, lcd.RED)
lcd.fillTriangle(122, 122, 169, 198, 151, 182, lcd.RED)
lcd.drawCircle(180, 180, 10, lcd.BLUE)
lcd.fillcircle(100, 100, 10, lcd.BLUE)
lcd.drawRect(180, 12, 122, 10, lcd.BLUE)
lcd.fillRect(180, 30, 122, 10, lcd.BLUE)
lcd.drawRoundRect(180, 50, 122, 10, 4, lcd.BLUE)
lcd.fillRoundRect(180, 70, 122, 10, 4, lcd.BLUE)
lcd.print('this is a print text function', 80, 80)
```
+14 -14
View File
@@ -1,15 +1,15 @@
# Speaker
### <mark>tone</mark>
> M5.Speaker.tone(uint32_t freq);
Set the pitch of speaker.
| Param | Type | Description |
| --- | --- | --- |
| freq | <code>uint32_t</code> | frequency |
**Example**
```c++
M5.Speaker.tone(100);
# Speaker
### <mark>tone</mark>
> M5.Speaker.tone(uint32_t freq);
Set the pitch of speaker.
| Param | Type | Description |
| --- | --- | --- |
| freq | <code>uint32_t</code> | frequency |
**Example**
```c++
M5.Speaker.tone(100);
```
+48 -48
View File
@@ -1,48 +1,48 @@
# BALA - Balanced Car
<img src="assets/img/product_pics/app/bala_1.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_2.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_3.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_4.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_5.jpg" width="250" height="250">
* * *
:memo:**[Description](#Description)**&nbsp;&nbsp;&nbsp;:bulb:**[Quick Start](/zh_CN/quick_start/bala/bala_quick_start)**&nbsp;&nbsp;&nbsp;:octocat:**[Example](https://github.com/m5stack/M5Bala/tree/master/examples)**&nbsp;&nbsp;&nbsp;🛒**[Purchase](https://www.aliexpress.com/store/product/M5Satck-New-BALA-Car-ESP32-Development-Mini-Electric-Self-balancing-Car-2DC-Motor-with-Encoder-PSRAM/3226069_32904033658.html?spm=2114.12010615.8148356.40.1fd3724dW3O2Bu.html)**
## Description
The M5Stack BALA is a balance bot based on M5Stack FIRE, including a 2 DC driver module based on Mega328p which is a core chip on Arduino UNO
You can even program The M5Stack BALA through Arduino or MicroPython with few code
The 2 DC driver module communicates with M5Stack FIRE through I2C bus. It's default I2C address is **0x56**
## Feature
- Programming Support
+ Python
- Compatible LEGO
- POGO Pin
- TF Card Support
## PARAMETER
Model | M5Stack FIRE
---|---
ESP32 | 240MHz dual core, 600 DMIPS, 520KB SRAM, Wi-Fi, dual mode Bluetooth
Flash | 16MB Flash + 4MB pSRAM
Input | 5V @ 500mA
Interface | TypeC x 1, GROVE(I2C+I/0+UART), Pogo Pin x 1
LCD | 2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker | 1W-0928
Microphone | MEMS Analog BSE3729 Microphone
LED | SK6812 3535 RGB LED x 10
MEMS | MPU9250 (MPU6500 + AK8963)
Battery | 550mAh @ 3.7V, inside
Op.Temp. | 32°F to 104°F ( 0°C to 40°C )
Size | 54 x 54 x 21 mm
C.A.S.E | Plastic ( PC )
Weight | 56g
## Include
- 1x M5Stack BALA
- 1x Motor Driver
- 2x N20(Encoder included)
- Type-C USB Cable
# BALA - Balanced Car
<img src="assets/img/product_pics/app/bala_1.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_2.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_3.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_4.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/bala_5.jpg" width="250" height="250">
* * *
:memo:**[Description](#Description)**&nbsp;&nbsp;&nbsp;:bulb:**[Quick Start](/zh_CN/quick_start/bala/bala_quick_start)**&nbsp;&nbsp;&nbsp;:octocat:**[Example](https://github.com/m5stack/M5Bala/tree/master/examples)**&nbsp;&nbsp;&nbsp;🛒**[Purchase](https://www.aliexpress.com/store/product/M5Satck-New-BALA-Car-ESP32-Development-Mini-Electric-Self-balancing-Car-2DC-Motor-with-Encoder-PSRAM/3226069_32904033658.html?spm=2114.12010615.8148356.40.1fd3724dW3O2Bu.html)**
## Description
The M5Stack BALA is a balance bot based on M5Stack FIRE, including a 2 DC driver module based on Mega328p which is a core chip on Arduino UNO
You can even program The M5Stack BALA through Arduino or MicroPython with few code
The 2 DC driver module communicates with M5Stack FIRE through I2C bus. It's default I2C address is **0x56**
## Feature
- Programming Support
+ Python
- Compatible LEGO
- POGO Pin
- TF Card Support
## PARAMETER
Model | M5Stack FIRE
---|---
ESP32 | 240MHz dual core, 600 DMIPS, 520KB SRAM, Wi-Fi, dual mode Bluetooth
Flash | 16MB Flash + 4MB pSRAM
Input | 5V @ 500mA
Interface | TypeC x 1, GROVE(I2C+I/0+UART), Pogo Pin x 1
LCD | 2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker | 1W-0928
Microphone | MEMS Analog BSE3729 Microphone
LED | SK6812 3535 RGB LED x 10
MEMS | MPU9250 (MPU6500 + AK8963)
Battery | 550mAh @ 3.7V, inside
Op.Temp. | 32°F to 104°F ( 0°C to 40°C )
Size | 54 x 54 x 21 mm
C.A.S.E | Plastic ( PC )
Weight | 56g
## Include
- 1x M5Stack BALA
- 1x Motor Driver
- 2x N20(Encoder included)
- Type-C USB Cable
+62 -62
View File
@@ -1,63 +1,63 @@
# LidarBot
<img src="assets/img/product_pics/app/lidarbot_01.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_02.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_03.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_04.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_05.jpg" width="250" height="250">
* * *
:memo:**[Description](#Description)**&nbsp;&nbsp;&nbsp;:octocat:**[Example](https://github.com/m5stack/Applications-LidarBot/tree/master/LidarBot/Example)**&nbsp;&nbsp;&nbsp;🛒**[Purchase](https://www.aliexpress.com/store/product/M5Stack-New-Lidar-Bot-Mini-Car-Lidar-8m-6Hz-McNamm-Wheels-NeoPixel-LED-Bar-with-ESP32/3226069_32951134988.html?spm=a2g1y.12024536.productList_5885013.subject_7)**
## Description
<mark>LidarBot</mark> is a four-wheeled car based on indoor navigation. The car body is loaded with lidar, four Mecanum wheels, control-wheel bottom board(based on MEGA328), two RGB bars, M5Core(CarMainController) and some LEGO holes.
Real-time communication via ESP-NOW between the car and the remote control handle. After receiving the control signal, the car master controlls the wheels and RGB bars through the specified protocol format.
And in addition to controlling the car's flexible front, rear, left and right movements, the indoor terrain can also be displayed on the display screens of the car master(M5Core) and the remote control handle.
## Feature
- Lidar: 8m @ 6Hz
- Programming Support
+ Arduino
- Compatible LEGO
## Protocol for CarBottomBoard
*Protocol FormatData Header(command type) + Data Packet + Data Tail*
| Control Target | Protocol Format |
| :-------------: |:------------------------------------: |
| Wheels | 0xAA,SpeedX,SpeedY,SpeedZ,SpeedA,0x55 |
| One RGB | 0xAB,LedIndex,R,G,B,0x55 |
| Front RGB Bar | 0xAC,R,G,B,0x55 |
| Back RGB Bar | 0xAD,R,G,B,0x55 |
| All RGB | 0xAE,R,G,B,0x55 |
| ServoMotor0 | 0xAF,Angle,0x55 |
| ServoMotor1 | 0xB0,Angle,0x55 |
## PARAMETER
- Communication Parameter
- M5Core(CarMain) <-> Lidar(GPIO16 <-> Lidar)
Serial Configuration: "230400bps, 8, n, 1"(8 bits data, no parity, 1 stop bit)
- M5Core(CarMain) <-> CarBottomBoard(GPIO17 <-> Lidar)
Serial Configuration: "115200bps, 8, n, 1"(8 bits data, no parity, 1 stop bit)
- PinMap
- ServoMotor0 <-> A0(MEGA328)
- ServoMotor1 <-> A1(MEGA328)
- NeoPixelRGB <-> 11(MEGA328)
## Include
- 1x LidarBot
- 1x Remote Control Handle
- 2x Battery(1300mAh @ 11.1V)
- 1x Power Charger
- 1x Type-C USB Cable
## APPLICATIONS
- Indoor Navigation
- Autonomous walking maze
- Route plan
# LidarBot
<img src="assets/img/product_pics/app/lidarbot_01.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_02.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_03.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_04.jpg" width="250" height="250"> <img src="assets/img/product_pics/app/lidarbot_05.jpg" width="250" height="250">
* * *
:memo:**[Description](#Description)**&nbsp;&nbsp;&nbsp;:octocat:**[Example](https://github.com/m5stack/Applications-LidarBot/tree/master/LidarBot/Example)**&nbsp;&nbsp;&nbsp;🛒**[Purchase](https://www.aliexpress.com/store/product/M5Stack-New-Lidar-Bot-Mini-Car-Lidar-8m-6Hz-McNamm-Wheels-NeoPixel-LED-Bar-with-ESP32/3226069_32951134988.html?spm=a2g1y.12024536.productList_5885013.subject_7)**
## Description
<mark>LidarBot</mark> is a four-wheeled car based on indoor navigation. The car body is loaded with lidar, four Mecanum wheels, control-wheel bottom board(based on MEGA328), two RGB bars, M5Core(CarMainController) and some LEGO holes.
Real-time communication via ESP-NOW between the car and the remote control handle. After receiving the control signal, the car master controlls the wheels and RGB bars through the specified protocol format.
And in addition to controlling the car's flexible front, rear, left and right movements, the indoor terrain can also be displayed on the display screens of the car master(M5Core) and the remote control handle.
## Feature
- Lidar: 8m @ 6Hz
- Programming Support
+ Arduino
- Compatible LEGO
## Protocol for CarBottomBoard
*Protocol FormatData Header(command type) + Data Packet + Data Tail*
| Control Target | Protocol Format |
| :-------------: |:------------------------------------: |
| Wheels | 0xAA,SpeedX,SpeedY,SpeedZ,SpeedA,0x55 |
| One RGB | 0xAB,LedIndex,R,G,B,0x55 |
| Front RGB Bar | 0xAC,R,G,B,0x55 |
| Back RGB Bar | 0xAD,R,G,B,0x55 |
| All RGB | 0xAE,R,G,B,0x55 |
| ServoMotor0 | 0xAF,Angle,0x55 |
| ServoMotor1 | 0xB0,Angle,0x55 |
## PARAMETER
- Communication Parameter
- M5Core(CarMain) <-> Lidar(GPIO16 <-> Lidar)
Serial Configuration: "230400bps, 8, n, 1"(8 bits data, no parity, 1 stop bit)
- M5Core(CarMain) <-> CarBottomBoard(GPIO17 <-> Lidar)
Serial Configuration: "115200bps, 8, n, 1"(8 bits data, no parity, 1 stop bit)
- PinMap
- ServoMotor0 <-> A0(MEGA328)
- ServoMotor1 <-> A1(MEGA328)
- NeoPixelRGB <-> 11(MEGA328)
## Include
- 1x LidarBot
- 1x Remote Control Handle
- 2x Battery(1300mAh @ 11.1V)
- 1x Power Charger
- 1x Type-C USB Cable
## APPLICATIONS
- Indoor Navigation
- Autonomous walking maze
- Route plan
- Autopilot
+24 -24
View File
@@ -1,24 +1,24 @@
# FACE Base
## Description
<mark>FACE Base</mark> is a base of [FACES Kit](en/core/face_kit). It's composed of M5Core base and battery as shown below.
<img src="assets/img/product_pics/base/faces_06.png" width="50%" height="50%">
There are some expanding gpio(see the last picture) of M-Bus at the back of FACES Base, in order for you make a complex project conveniently. Obsolutely, a battery(600mAh) is built in base, so that you can use FACES Kit without usb cable.
## Usage
**Please stack M5Core and FACES Keyboard(*i.e. QWERTY, GameBoy, Calculator*) over Base when use it as shown below**
<img src="assets/img/product_pics/base/faces_07.png" width="50%" height="50%">
## Related Link
- **[Purchase FACES Kit](https://www.aliexpress.com/store/product/M5Stack-NEW-Offer-ESP32-Open-Source-Faces-Pocket-Computer-with-Keyboard-Gameboy-Calculator-for-Micropython-Arduino/3226069_32843973578.html?spm=2114.12010615.8148356.2.75cdb3ceTGkLQo)**
## M-Bus
<img src="assets/img/product_pics/core/M-BUS.png" alt="basic_05" width="60%" height="60%">
# FACE Base
## Description
<mark>FACE Base</mark> is a base of [FACES Kit](en/core/face_kit). It's composed of M5Core base and battery as shown below.
<img src="assets/img/product_pics/base/faces_06.png" width="50%" height="50%">
There are some expanding gpio(see the last picture) of M-Bus at the back of FACES Base, in order for you make a complex project conveniently. Obsolutely, a battery(600mAh) is built in base, so that you can use FACES Kit without usb cable.
## Usage
**Please stack M5Core and FACES Keyboard(*i.e. QWERTY, GameBoy, Calculator*) over Base when use it as shown below**
<img src="assets/img/product_pics/base/faces_07.png" width="50%" height="50%">
## Related Link
- **[Purchase FACES Kit](https://www.aliexpress.com/store/product/M5Stack-NEW-Offer-ESP32-Open-Source-Faces-Pocket-Computer-with-Keyboard-Gameboy-Calculator-for-Micropython-Arduino/3226069_32843973578.html?spm=2114.12010615.8148356.2.75cdb3ceTGkLQo)**
## M-Bus
<img src="assets/img/product_pics/core/M-BUS.png" alt="basic_05" width="60%" height="60%">

Some files were not shown because too many files have changed in this diff Show More