Merge pull request #2455 from cesanta/micropython

Add Micropython on ESP32 example
This commit is contained in:
Sergey Lyubka 2023-11-04 13:31:44 +00:00 committed by GitHub
commit a619de0508
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 86 additions and 0 deletions

View File

@ -321,6 +321,7 @@ jobs:
example:
- path: esp32/device-dashboard
- path: esp32/uart-bridge
- path: esp32/micropython
- path: esp8266/http-client-server
- path: microchip/same54-xpro/device-dashboard
- path: microchip/same54-xpro/mqtt-client

View File

@ -0,0 +1,26 @@
THISDIR = $(realpath $(CURDIR))
ROOTDIR = $(realpath $(CURDIR)/../../..)
PORT ?= /dev/ttyUSB0
DOCKER ?= docker run --rm $(DA) -v $(ROOTDIR):$(ROOTDIR) -w $(THISDIR) espressif/idf:v5.0.2
# Note that the esp32 port needs the extra .. for relative paths due to the location of its main CMakeLists.txt file
CMD ?= bash -c '$(MAKE) -C micropython/ports/esp32 submodules && $(MAKE) -C micropython/ports/esp32 USER_C_MODULES=../../../../mongoose/micropython.cmake'
all: example
example:
true
build: micropython
$(DOCKER) $(CMD)
micropython:
$(DOCKER) git clone https://github.com/micropython/micropython.git
clean:
$(DOCKER) rm -rf micropython
flash:
flash: DA = --device $(PORT)
flash: CMD = bash -c '$(MAKE) -C micropython/ports/esp32 erase deploy'
flash: build

View File

@ -0,0 +1,23 @@
# Mongoose as a MicroPython user module on the ESP32
The most basic usage is:
```python
import network
import mongoose
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("<SSID>", "<PASSWORD>")
while not sta_if.isconnected():
pass
mongoose.init()
while True:
mongoose.poll(1000)
```
Check [_thread](https://docs.micropython.org/en/latest/library/_thread.html) support for more advanced usage
https://docs.micropython.org/en/latest/develop/cmodules.html

View File

@ -0,0 +1,29 @@
// Copyright (c) 2022 Cesanta Software Limited
// All rights reserved
#include "mongoose.h"
static void t_fn(void *arg) { // Tick periodically
MG_INFO(("tick"));
(void) arg;
}
static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
if (ev == MG_EV_HTTP_MSG) mg_http_reply(c, 200, "", "hi\n");
(void) fn_data;
(void) ev_data;
}
static struct mg_mgr mgr;
void mgmp_init(void) {
mg_mgr_init(&mgr); // Mongoose event manager
mg_log_set(MG_LL_DEBUG); // Set log level
mg_timer_add(&mgr, 1000, MG_TIMER_REPEAT, t_fn, &mgr);
mg_http_listen(&mgr, "http://0.0.0.0:80", fn, &mgr);
}
void mgmp_poll(int t) {
mg_mgr_poll(&mgr, t);
}

View File

@ -0,0 +1 @@
../../../micropython/mongoose/micropython.cmake

View File

@ -0,0 +1 @@
../../../micropython/mongoose/micropython.mk

View File

@ -0,0 +1 @@
../../../micropython/mongoose/module.c

View File

@ -0,0 +1 @@
../../../../mongoose.c

View File

@ -0,0 +1 @@
../../../../mongoose.h

View File

@ -0,0 +1,2 @@
// For some reason, IDF detection at build time does not work here
#define MG_ARCH MG_ARCH_ESP32