mirror of
https://github.com/m5stack/m5-docs.git
synced 2026-05-20 10:23:01 -07:00
upload
This commit is contained in:
+42
-42
@@ -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
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+11
-11
@@ -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)
|
||||
|
||||
@@ -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
@@ -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>
|
||||
@@ -1,3 +1,3 @@
|
||||
# Headers Socket
|
||||
|
||||
## (coming soom...)
|
||||
# Headers Socket
|
||||
|
||||
## (coming soom...)
|
||||
|
||||
+10
-10
@@ -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
@@ -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
@@ -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 (display’s smaller dimension) |
|
||||
| h | display phisical height in pixels (display’s 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 (display’s smaller dimension) |
|
||||
| h | display phisical height in pixels (display’s 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 (display’s smaller dimension) |
|
||||
| h | display phisical height in pixels (display’s 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 (display’s smaller dimension) |
|
||||
| h | display phisical height in pixels (display’s 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
@@ -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
@@ -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)** :bulb:**[Quick Start](/zh_CN/quick_start/bala/bala_quick_start)** :octocat:**[Example](https://github.com/m5stack/M5Bala/tree/master/examples)** 🛒**[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)** :bulb:**[Quick Start](/zh_CN/quick_start/bala/bala_quick_start)** :octocat:**[Example](https://github.com/m5stack/M5Bala/tree/master/examples)** 🛒**[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
@@ -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)** :octocat:**[Example](https://github.com/m5stack/Applications-LidarBot/tree/master/LidarBot/Example)** 🛒**[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 Format:Data 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)** :octocat:**[Example](https://github.com/m5stack/Applications-LidarBot/tree/master/LidarBot/Example)** 🛒**[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 Format:Data 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
@@ -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
Reference in New Issue
Block a user