diff --git a/docs/en/module/grbl13.2.md b/docs/en/module/grbl13.2.md index 29965a29..018cb82a 100644 --- a/docs/en/module/grbl13.2.md +++ b/docs/en/module/grbl13.2.md @@ -106,6 +106,7 @@ The power input interface is DC/9-24V, the motor drive current can reach 1.5A, a ## Related Link - [DRV8825 Datasheet](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/module/DRV8825_en.pdf) +- [GRBL-Firmware](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/GRBL13.2-Module-Arduino-Library.zip) ## PinMap diff --git a/docs/en/module/stepmotor.md b/docs/en/module/stepmotor.md index 1b973ede..995790a0 100644 --- a/docs/en/module/stepmotor.md +++ b/docs/en/module/stepmotor.md @@ -4,8 +4,6 @@
- - ## Description **STEPMOTOR** is used for stepper motor control. It is perfect for any motion project as it can drive up to 3 Stepper motors with **GRBL** control. @@ -38,6 +36,14 @@ Integrated 3 DRV8825, a simple but very powerful board that can control one bipo Resources Parameter + + DC Interface + XT30 + + + Motor Interface + HY2.0-4P + Net weight 24g diff --git a/docs/en/mpy/advanced.md b/docs/en/mpy/advanced.md new file mode 100644 index 00000000..c3f34252 --- /dev/null +++ b/docs/en/mpy/advanced.md @@ -0,0 +1,290 @@ +# wifiCfg + +>Use the API in the wifiCfg module to configure the device WiFi connection. + + +```clike +import wifiCfg + +//Automatically connect to the saved WiFi, the screen displays the connection UI +wifiCfg.autoConnect(lcdShow=True) + +//Connect to the specified WiFi +wifiCfg.doConnect(ssid, pwd) + +//Connect to the specified WiFi and specify the connection timeout period +wifiCfg.connect(ssid, pwd, timeout, block=False) + +//WiFi reconnect +wifiCfg.reconnect() + +//Is it connected +print(wifiCfg.wlan_sta.isconnected()) + +``` + +# M5mqtt + +>Use the API in the M5mqtt module to connect to the mqtt server and subscribe to publish message content. + +-Connect to mqtt server + +```clike + +from m5mqtt import M5mqtt + +//Create connection instance +m5mqtt = M5mqtt( + client_id, + server, + port=0, + user=None, + password=None, + keepalive=0, + ssl=False, + ssl_params=None +) + +//Start connection +m5mqtt.start() + +while True: + + +``` + +-Subscribe and publish news + +```clike + +//Subscribe news +def callback(topic_data): + print(topic_data) + +m5mqtt.subscribe(topic, callback) + + +//release the news +m5mqtt.publish(topic, data) + +``` + +-Other configurations + +```clike + +//Configure the client will message +m5mqtt.set_last_will(topic, msg) + +//Disconnect +m5mqtt.deinit() + +``` + +# ESP-NOW + +>Using ESP-NOW technology to wirelessly transmit data to other ESP32 master control devices + +```clike +import espnow + +//initialization +espnow.init() + +//Set the channel + +//Get the local mac_addr +espnow.get_mac_addr() + +//broadcast +espnow.broadcast(data='Hello') + +//Set the peer list +espnow.add_peer(slave_mac_addr, id) + +//send messages +espnow.send(id, data='World') + +//Send message callback +def send_cb(flag): + if flag: + print('succeed') + else: + print('Failed') + +espnow.send_cb(send_cb) + +//Receive message callback +def recv_cb(): + //retrieve data + sender_address, _, receive_data = espnow.recv_data(encoder='str') + +espnow.recv_cb(recv_cb) + +``` +# HTTP + +>Use the API in the HTTP module to send HTTP requests to the server to obtain data. + +```clike +import urequests + +//GET request +req = urequests.request( + method='GET', + url='http://api.m5stack.com/v1', + headers={'Content-Type':'text/html'} + ) + +//POST request +req = urequests.request( + method='POST', + url='http://api.m5stack.com/v1', + json={'KEY':'VALUE'}, + headers={'Content-Type':'text/html'} + ) + +//Get the response body status code +print(req.status_code) + +//Get the response body Reason-Phrase +print(req.reason) + +//Get the native response body +print(req.content) + +//Get response body string +print(req.text) + +//Get response body JSON +print(req.json) + +``` + +# NTP + +>Get current time information through NTP server. + +```clike + +import ntptime + + +//Set up NTP server +//eg: +//ntp = ntptime.client(host='jp.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='sg.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='tw.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='hk.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='tw.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='hk.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='us.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='de.pool.ntp.org', timezone=8) + +ntp = ntptime.client(host='cn.pool.ntp.org', timezone=8) + +//Get the timestamp +ntp.getTimestamp() + +//Format the date +ntp.formatDate('-') + +//Format the time +ntp.formatTime('-') + +//Format date & time +ntp.formatDatetime('-',':') + +ntp.year() +ntp.month() +ntp.day() +ntp.hour() +ntp.minute() +ntp.second() +ntp.weekday() + +``` + + +# EEPROM + +>Save data persistently through EEPROM. + +```clike + +import nvs + +//data input +nvs.write_str(KEY, VALUE) + +//Read data +nvs.read_str(KEY) + +``` + +# UART + +>Send and receive data via UART. + +```clike + +//Create a serial port instance +uart1 = machine.UART(1, tx=1, rx=3) + +//Initialize the serial port +uart1.init(115200, bits=8, parity=None, stop=1) + +//Is there any content in the cache? +uart1.any() + +//Read the content in the buffer area +uart1.read() + +//Write content to the serial port +uart1.write('Hello') + +//Read/write case +while True: + if uart1.any(): + print(uart1.read()) + uart1.write('Hello') + +``` + +# SD-Card + +```clike + +import os + +//Read file +with open('/sd/FileName.*','r') as fs: + print(fs.read()) + +//Write file +with open('/sd/test.txt','w+') as fs: + fs.write('Hello World') + +//File read and write mode +w is opened for writing, +w+ open in read-write mode +r open in read mode +r+ open in read-write mode +a Open in append mode + +//Set the file cursor +fs.seek(0) + +//View catalog +os.listdir('/sd/DirectoryPath') + +//Determine whether the path is a file +os.stat('/sd/FilePath')[0] == 0x8000) + +//Determine whether the path is a directory +os.stat('/sd/DirectoryPath')[0] == 0x4000) + +//Determine whether the file exists in the specified directory +'FileName.*' in os.listdir('/sd/DirectoryPath') + +``` diff --git a/docs/en/mpy/mpy_api_list.md b/docs/en/mpy/mpy_api_list.md index 32253bc4..180ba4ba 100644 --- a/docs/en/mpy/mpy_api_list.md +++ b/docs/en/mpy/mpy_api_list.md @@ -59,13 +59,28 @@ const unit = { "id":"unit_api" }; +const advanced = { + 'title':"Advanced", + 'item':{ + 'WiFi':'#/en/mpy/advanced?id=wificfg', + 'MQTT':'#/en/mpy/advanced?id=m5mqtt', + 'ESP-NOW':'#/en/mpy/advanced?id=esp-now', + 'HTTP':'#/en/mpy/advanced?id=http', + 'NTP':'#/en/mpy/advanced?id=ntp', + 'EEPROM':'#/en/mpy/advanced?id=eeprom', + 'UART':'#/en/mpy/advanced?id=uart' + }, + "id":"advanced_api" +}; + var arduino_home_page = new Vue({ el:'#arduino_home_page', data() { return { list: { quickstart: quickstart, - unit: unit + unit: unit, + advanced: advanced } }; } diff --git a/docs/zh_CN/module/grbl13.2.md b/docs/zh_CN/module/grbl13.2.md index adeed6c6..58725281 100644 --- a/docs/zh_CN/module/grbl13.2.md +++ b/docs/zh_CN/module/grbl13.2.md @@ -103,6 +103,7 @@ ## 相关链接 - [DRV8825 Datasheet](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/module/DRV8825_en.pdf) +- [GRBL-Firmware](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/GRBL13.2-Module-Arduino-Library.zip) ## 管脚映射 diff --git a/docs/zh_CN/module/stepmotor.md b/docs/zh_CN/module/stepmotor.md index 98aa9b64..b6133267 100644 --- a/docs/zh_CN/module/stepmotor.md +++ b/docs/zh_CN/module/stepmotor.md @@ -4,8 +4,6 @@
- - ## 描述 **STEPMOTOR** 是M5Stack堆叠模块系列中的一款,步进电机驱动模块.该模块能够通过 **GRBL** 库同时驱动3个步进电机.因此非常适合应用在运动控制项目. @@ -37,6 +35,14 @@ 规格 参数 + + DC接口型号 + XT30 + + + 电机接口型号 + HY2.0-4P + 净重 24g diff --git a/docs/zh_CN/mpy/advanced.md b/docs/zh_CN/mpy/advanced.md index 631a4899..79376aca 100644 --- a/docs/zh_CN/mpy/advanced.md +++ b/docs/zh_CN/mpy/advanced.md @@ -3,12 +3,24 @@ >使用wifiCfg模块中的API, 配置设备WiFi连接。 -``` +```clike import wifiCfg -//自动连接已经保存的WiFi +//自动连接已经保存的WiFi,屏幕显示连接UI wifiCfg.autoConnect(lcdShow=True) +//连接指定的WiFi +wifiCfg.doConnect(ssid, pwd) + +//连接指定的WiFi,并指定连接超时时间 +wifiCfg.connect(ssid, pwd, timeout, block=False) + +//WiFi重连 +wifiCfg.reconnect() + +//是否已经连接 +print(wifiCfg.wlan_sta.isconnected()) + ``` # M5mqtt @@ -73,7 +85,7 @@ m5mqtt.deinit() >使用ESP-NOW技术,无线传输数据到其他ESP32主控设备 -``` +```clike import espnow //初始化 @@ -114,7 +126,7 @@ espnow.recv_cb(recv_cb) >使用HTTP模块中的API, 向服务器发送HTTP请求,获取数据。 -``` +```clike import urequests //GET请求 @@ -149,4 +161,130 @@ print(req.json) ``` +# NTP +>通过NTP服务器获取当前时间信息。 + +```clike + +import ntptime + + +//设置NTP服务器 +//eg: +//ntp = ntptime.client(host='jp.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='sg.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='tw.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='hk.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='tw.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='hk.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='us.pool.ntp.org', timezone=8) +//ntp = ntptime.client(host='de.pool.ntp.org', timezone=8) + +ntp = ntptime.client(host='cn.pool.ntp.org', timezone=8) + +//获取时间戳 +ntp.getTimestamp() + +//格式化日期 +ntp.formatDate('-') + +//格式化时间 +ntp.formatTime('-') + +//格式化日期&时间 +ntp.formatDatetime('-', ':') + +ntp.year() +ntp.month() +ntp.day() +ntp.hour() +ntp.minute() +ntp.second() +ntp.weekday() + +``` + + +# EEPROM + +>通过EEPROM持久化保存数据。 + +```clike + +import nvs + +//写入数据 +nvs.write_str(KEY, VALUE) + +//读取数据 +nvs.read_str(KEY) + +``` + +# UART + +>通过UART发送和接收数据。 + +```clike + +//创建串口实例 +uart1 = machine.UART(1, tx=1, rx=3) + +//初始化串口 +uart1.init(115200, bits=8, parity=None, stop=1) + +//缓存区中是否有内容 +uart1.any() + +//读取缓存区中的内容 +uart1.read() + +//向串口写入内容 +uart1.write('Hello') + +//读/写案例 +while True: + if uart1.any(): + print(uart1.read()) + uart1.write('Hello') + +``` + +# SD-Card + +```clike + +import os + +//读文件 +with open('/sd/FileName.*', 'r') as fs: + print(fs.read()) + +//写文件 +with open('/sd/test.txt', 'w+') as fs: + fs.write('Hello World') + +//文件读写模式 +w 以写方式打开, +w+ 以读写模式打开 +r 以读模式打开 +r+ 以读写模式打开 +a 以追加模式打开 + +//设置文件光标 +fs.seek(0) + +//查看目录 +os.listdir('/sd/DirectoryPath') + +//判断路径是否为文件 +os.stat('/sd/FilePath')[0] == 0x8000) + +//判断路径是否为目录 +os.stat('/sd/DirectoryPath')[0] == 0x4000) + +//判断文件是否存在于指定目录 +'FileName.*' in os.listdir('/sd/DirectoryPath') + +``` diff --git a/docs/zh_CN/mpy/mpy_api_list.md b/docs/zh_CN/mpy/mpy_api_list.md index f1ffa4ea..62521ff2 100644 --- a/docs/zh_CN/mpy/mpy_api_list.md +++ b/docs/zh_CN/mpy/mpy_api_list.md @@ -59,13 +59,28 @@ const unit = { "id":"unit_api" }; +const advanced = { + 'title':"Advanced", + 'item':{ + 'WiFi':'#/zh_CN/mpy/advanced?id=wificfg', + 'MQTT':'#/zh_CN/mpy/advanced?id=m5mqtt', + 'ESP-NOW':'#/zh_CN/mpy/advanced?id=esp-now', + 'HTTP':'#/zh_CN/mpy/advanced?id=http', + 'NTP':'#/zh_CN/mpy/advanced?id=ntp', + 'EEPROM':'#/zh_CN/mpy/advanced?id=eeprom', + 'UART':'#/zh_CN/mpy/advanced?id=uart' + }, + "id":"advanced_api" +}; + var arduino_home_page = new Vue({ el:'#arduino_home_page', data() { return { list: { quickstart: quickstart, - unit: unit + unit: unit, + advanced: advanced } }; }