Code Monkey home page Code Monkey logo

mqboard's Introduction

MQBoard - MicroPython MQTT Micro-Framework

This repository contains a micro-framework for using MQTT with asyncio on MicroPython boards, primarily on the ESP32. The mqtt_async library can be used stand-alone as a robust MQTT client library designed for asyncio. The rest of this repo forms a micro-framework designed to operate MQTT-connected nodes remotely with great flexibility and robustness.

Goals and features

Everything in this repo is engineered for systems that:

  • run at some remote location and need to be managed from a distance, i.e., without plugging them into the USB port of some computer, and
  • use a single encrypted connection, specifically, an MQTT connection to a broker.

By using a single connection only one set of TLS buffers is needed (20KB per connection, ouch!), and there are no per-board certificates to maintain. There are also no open ports an attacker could target.

The above goals make the following features desirable:

  • Everything must be designed to stay up 24x7 and recover from failures.
  • REPL access: being able to access the repl on each board via MQTT in order to run diagnostics, perform upgrades, or otherwise troubleshoot.
  • OTA update: being able to send a MicroPython firmware update via MQTT.
  • Modules: being able to add or update functional modules easily and with minimal impact on existing modules.
  • Remote logging of ideally everything normally printed to the serial console via MQTT.
  • Crash logging to some local persistent store so crashes can be analyzed remotely after the board resets.
  • Watchdog timer and safe mode after successive crashes to ensure the board always comes up and can be accessed via MQTT even if the application misbehaves.

Currently all these features except for the crash log to local storage are implemented.

Open issues

The main open (high-level) issue is low power operation. Right now power is not taken into consideration and, in particular, the start-up time is not optimized to enable periodic wake-up operation on batteries.

OTA firmware upgrades and safe mode are currently not integrated, which means that an OTA upgrade requires more care and thought than it should.

The mqtt_async implementation tries to be compatible with Peter Hinch's mqtt_as and it's time to depart from that so the functionality in board/mqtt.py can be integrated directly and so the management of Wifi can be decoupled.

Contents

The contents of this repo is:

  • mqtt_async contains an MQTT client library that uses asyncio, is optimized for streaming files, and forms the backbone of most other libraries and tools here. It is used by other parts of the repo but can easily be used stand-alone.
  • mqrepl contains a library to access the REPL via MQTT, basically to be able to send filesystem and interactive commands via MQTT.
  • mqboard contains a python commandline tool to be run on a developer's machine to send commands to mqrepl. The directory also contains a watchdog and support for a safe mode.
  • board contains boot.py and main.py that make it easy to add modules to a board. The directory also contain a logging.py implementation that functions via MQTT.

Additional modules of interest can be found in https://github.com/tve/mpy-lib, specifically:

  • sntp to synchronize time
  • sysinfo to send periodic MQTT messages with memory and other system info

Finally, some of the functionality depends on enhancements to MicroPython that are stuck in pull requests on mainline. These can be found integrated into the tve branch of https://github.com/tve/micropython.

Testing

Everything in this repository is subject to CI testing. Some of the tests are run on Linux using CPython but the majority are actually executed on an ESP32 using gohci.

Getting started

The getting-started consists of three steps:

  1. Set-up some prerequisites
  2. Load the board with the safemode software, from there on it can be managed over MQTT
  3. Try out the sample blinky app (blinks the LED on the board at a frequency that can be controlled over MQTT.

Prerequisites

  • MQTT broker, preferably local, preferably supporting TLS (MQTTS), preferably using a public certificate, e.g. from Let's Encrypt.
  • ESP32 pre-loaded with TvE's version of MicroPython supporting the "new asyncio", i.e. post-v1.12, as well as a functioning RTC.memory(), asyncio with TLS, and a bunch of other bug fixes: https://github.com/tve/micropython/releases/tag/v1.12-tve2.
  • The micropython repository (https://github.com/micropython/micropython) or at least the pyboard.py tool from its tools directory.
  • The Python click and paho-mqtt packages: pip install click paho-mqtt.

Loading up safemode

Loading up the files that make up safe-mode is initially done over USB. Later on they can be updated over MQTT, but we need to bootstrap first.

  1. Wipe the esp32's filesystem clean (you don't need this if you just did a flash erase and loaded the firmware):
    $ /home/src/esp32/micropython/tools/pyboard.py board/rm_rf.py
    rmdir contents: /
    rm //boot.py
    rm //main.py
  1. Copy the config file template to board/board_config.py, and modify it to suit your environment, e.g.:
    cp board/board_config_tmpl.py board/board_config.py
    vim board/board_config.py

The lines you need to edit are clearly marked.

  1. Load the files (adjust the path to the tools dir and the device name):
    $ PATH=/home/src/esp32/micropython/tools:$PATH PYBOARD_DEVICE=/dev/ttyUSB0 ./load.sh
    device: /dev/ttyUSB0
    cp ./board/boot.py :boot.py
    mkdir :/safemode
    cp ./board/main.py :/safemode/main.py
    cp ./board/board.py :/safemode/board.py
    cp ./board/logging.py :/safemode/logging.py
    cp ./board/mqtt.py :/safemode/mqtt.py
    cp ./mqrepl/mqrepl.py :/safemode/mqrepl.py
    cp ./mqrepl/watchdog.py :/safemode/watchdog.py
    cp ./mqtt_async/mqtt_async.py :/safemode/mqtt_async.py
    cp ./board/board_config.py :/safemode/board_config.py
  1. Open a new terminal window/tab/pane you can keep open to watch what the board is doing and connect, ideally with a pgm that supports ANSI color escape sequences (sadly, colors don't show here). Then either press the reset button on the board or toggle DTR (in minicom that's ctrl-t ctrl-d two times, in picocom that's ctrl-a ctrl-p):
    $ miniterm2.py --filter direct /dev/ttyUSB0 115200
    --- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
    --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    --- DTR inactive ---
    --- DTR active ---
    ets Jun  8 2016 00:22:57

    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    ...
    I (579) cpu_start: Starting scheduler on PRO CPU.
    I (0) cpu_start: Starting scheduler on APP CPU.
    Traceback (most recent call last):
      File "boot.py", line 51, in <module>
    ImportError: no module named 'logging'
    Switching to SAFE MODE
    W 1394     main:

    W 1401     main: MicroPython 1.12.0 (v1.12-weather-1-8-g251c8f5a3 on 2020-05-23)
    W 1408     main: 4MB/OTA NO-BT module with ESP32
    W 1414     main: esp32/test mqtest starting at (1970, 1, 1, 0, 0, 1, 3, 1, 0)

    W 1423     main: Boot partition: ota_0
    W 1431     main: SAFE MODE boot (normal mode failed)
    W 1460     main: Reset cause: PWRON_RESET
    I 1578     main: MEM free=101424 contig=94752
    ...
    I (9198) network: CONNECTED
    I (9234) wifi: AP's beacon interval = 102400 us, DTIM period = 1
    I (10053) tcpip_adapter: sta ip: 192.168.0.106, mask: 255.255.255.0, gw: 192.168.0.1
    I (10055) network: GOT_IP
    I 7080 mqtt_async: Connecting to ('192.168.0.14', 4883) id=esp32/test-mqtest clean=1
    I 9244 mqtt_async: Connecting to ('192.168.0.14', 4883) id=esp32/test-mqtest clean=0
    I 11166     mqtt: Initial MQTT connection (->3)
    I 11175     main: Logging to esp32/test/log
    I 11182     main: Log buf: 1350/10240 bytes
    I 11214     mqtt: MQTT connected (->0)
    I 11474     main: Log buf: 754/1024 bytes
    I 11569   mqrepl: Subscribed to esp32/test/mqb/cmd/#
    I 11607 watchdog: esp32/test/mqb/cmd/eval/0F00D/
    I 11664   mqrepl: Dispatch eval, msglen=15 seq=0 last=True id=0F00D dup=0
    ...

What you see is are the initial boot messages from ESP-IDF followed by a python exception, which is from boot.py trying to load the logger from the application. But we've only loaded safe-mode files so far, hence the exception. As a result, boot.py switches to safe-mode and proceeds. Then main prints some hello-world info and starts loading the modules comprising the safe-mode application. These start wifi, connect via MQTT, and at the end you see the watchdog sending a round-trip message to the MQTT Repl to feed the WDT timer. Your board is now up!

  1. Try something:
    $ ./mqboard/mqboard --prefix esp32/test eval '45+876'
    921
    $ ./mqboard/mqboard --prefix esp32/blinky eval 'import sys; print(sys.implementation)'
    (name='micropython', version=(1, 12, 0), mpy=10757)

The prefix corresponds to the part before the "/mqb" in the log message I 11569 mqrepl: Subscribed to esp32/test/mqb/cmd/# (it's the mqtt_prefix variable in board_config.py).

You can now proceed to the blinky demo app.

For help, please post on https://forum.micropython.org

For license info see the LICENSE file.

mqboard's People

Contributors

tve avatar superbock avatar

Stargazers

Borys Szefczyk avatar Mathias Bøhn Grytemark avatar Hans Getzner avatar Dan White avatar  avatar Ajin Asokan avatar frost avatar  avatar Yury K avatar Alexandre B avatar Todd avatar Rodrigo Nazar Meier avatar Maciej avatar nocarryr avatar  avatar Alain D. Godo Alonso avatar  avatar Wojciech Bederski avatar 大师兄 avatar ρнσтση avatar  avatar Sam Clayton avatar Shaun Dubuque avatar Justin avatar  avatar  avatar  avatar  avatar Dr. Magnus Christ avatar ravioliboy avatar Mark McCurry avatar Adriano Figueiredo avatar David Danziger avatar  avatar  avatar  avatar Andrew Qiu avatar  avatar Artur avatar Jesus avatar  avatar sam lee avatar Plamen Delchev avatar Andrew Leech avatar Chiho Sin avatar Zhao.Xing avatar Erik Granlund avatar  avatar Milton Eduardo Sosa avatar Reinholds Zviedris avatar  avatar vit avatar Akhilesh  Thorat avatar  avatar  avatar Ivan Sakharchuk avatar Jos Verlinde avatar Rimas Baltrušis avatar Richard Lourette avatar truckershitch avatar Russ Hughes avatar Sticks avatar Patrick de Koning avatar Honza Pobořil avatar  avatar  avatar Thomas Wenrich avatar  avatar Theo Weiss avatar HUANG SIZHE avatar  avatar Eric Le Nay avatar Denis German Gimenez avatar Jonathan Beri avatar  avatar  avatar Jorge Wendell avatar  avatar  avatar Clement Tong (Yuk Chun) avatar Tristan Blandford avatar  avatar  avatar  avatar Michael Erb avatar soidea avatar Luke Cyca avatar Brian Johnson avatar Martijn Stommels avatar  avatar Joachim Lindborg avatar Ni Jannasch avatar Mila76 avatar L Mwangi avatar Christopher Arndt avatar  avatar Brandon Piner avatar Dinesh R Thangavel avatar Henry Goldwire avatar  avatar

Watchers

 avatar James Cloos avatar Javier NR avatar Patrick avatar Jorge Wendell avatar Theo Weiss avatar Walkline Wang avatar Dinesh R Thangavel avatar Kinno avatar Rick Bartlett avatar  avatar Archit Khandelwal avatar This Manhart avatar  avatar  avatar  avatar Clement Tong (Yuk Chun) avatar

mqboard's Issues

mqview: dies if message contains non-utf8

  File "/home/src/esp32/mpy-mqtt/mqboard/view.py", line 24, in on_log
    m = msg.payload.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

It's sometimes convenient to use something like --topic board/location/# to see whether a seemingly dead board sends anything and the mqb messages sent by the watchdog start with 0x80 causing the above error.

mqboard get always times out

Verifying "ls" that the directory contains files works ok. Trying "get" always times out, tried increasing --timeout 240 also

$ ../mqboard/mqboard --server mqtt.xxxxxx.com --verbose --port 8883 --tls --prefix aiotcomqtt ls
Connecting to mqtt.xxxxxx.com:8883
Subscribing to aiotcomqtt/mqb/reply/out/XZu7DGgW and aiotcomqtt/mqb/reply/err/XZu7DGgW
Pub aiotcomqtt/mqb/cmd/eval/XZu7DGgW #0 last=True len=123
Received reply on topic 'aiotcomqtt/mqb/reply/out/XZu7DGgW' with QoS 1
0.253kB in 0.580s -> 0.436kB/s
2700 board_config.py
2621 boot.py
0 lib/
3644 main.py
0 safemode/
0 src/

$ ../mqboard/mqboard --server mqtt.xxxxxx.com --verbose --timeout 240 --port 8883 --tls --prefix aiotcomqtt get main.py main.py
Connecting to mqtt.xxxxxx.com:8883
Subscribing to aiotcomqtt/mqb/reply/out/0iwzLkt5 and aiotcomqtt/mqb/reply/err/0iwzLkt5
Error: Timeout!

mqboard: support auth

Currently mqboard does not support user/pass auth with the broker, this should be added via --user/--passwd cmdline options.

Typros in Version 0.7b4

Hi,

first of all I would like to thank you for this fantastic library. I use it to transfer the control commands for a LIN-BUS control unit. This works very well. The library not only works on an ESP32 but I also tested it on an RP2 pico W.

I loaded the version via PyPI and get 0.7b4 as the latest version. I find log.warnings in lines 678 and 690 which abort with an error. I use the MicroPython version 1.19.1-608.

Thanks
Magnus

Dot notation for accessing config dictionary does not work

Accessing config dictionary values in Micropython does not work. The example here: https://github.com/tve/mqboard/blob/master/mqtt_async/hello-world.py accesses config values using dot notation. These (and probably in many other example files) need to be converted to the standard dict['key'] notation.

Error:

>>> %Run -c $EDITOR_CONTENT
Traceback (most recent call last):
  File "<stdin>", line 34, in <module>
AttributeError: 'dict' object has no attribute 'subs_cb'

Micropython version:
MicroPython v1.19.1-824-g30db33d1e on 2023-01-19; Raspberry Pi Pico W with RP2040

Platform:
Raspberry Pi Pico W

remember time zone across reboots

Currently the RTC is kept running across resets (not power cycles) but the time zone is lost. This results in the wrong times being displayed at boot until SNTP or something else sets the time zone from some config. A simple and not-too-bad solution would be to have main.py set the time-zone from the board_config.

coro.coro

Good evening,
In mqboard/board/main.py ligne 123 in context["future"].coro.coro,
i think a coro is enought
thank

mqtt_async does not work with 1.13

Connecting to ('BROKER_IP', 1883) id=b'30aea4389004' clean=1
unexpected keyword argument 'ssl'
Task exception wasn't retrieved
future: <Task> coro= <generator object 'a' at 3ffe97b0>
Traceback (most recent call last):
  File "uasyncio/core.py", line 1, in run_until_complete
  File "wrap.py", line 7, in a
  File "mqtt.py", line 42, in start_mqtt
  File "mqtt_async.py", line 596, in connect
  File "mqtt_async.py", line 188, in connect
  File "mqtt_async.py", line 26, in open_connection
TypeError: unexpected keyword argument 'ssl'
MicroPython v1.13 on 2020-09-02; ESP32 module with ESP32

mqboard put needs to use flow-control

Any idea what might be happening here. Running /blinky/sync
(venv) fredrick@fredrick-Studio-XPS-435MT:~/Development/micropython/mqboard/blinky$ ./sync.sh --server mqtt.xxxxxxx.com --port 8883 --tls --prefix aiotcomqtt
Target directory /lib
ok sntp.py
ok sysinfo.py
ok logging.py
ok board.py
ok mqtt.py
ok mqrepl.py
ok watchdog.py
put shadiff ../mqtt_async/mqtt_async.py -> /lib/mqtt_async.py
MQRepl protocol error put: message missing: 22 vs. 21
Aborted!

Board not changing to normal mode via reset

I can't observe the behavior stated in point 5 of https://github.com/tve/mqboard/tree/master/blinky .

Note that there is a time-out on safe mode (set to 3 minutes in the board config) after which it attempts to switch back to normal mode if the watchdog is ticking along fine. If that happens you will see a magenta message C 00:58:54.405 watchdog: Switching to NORMAL MODE via reset. Just wait until it's connected again...

I think my board is timing out because after a while I start to get the following in a loop.

I 20:26:10.031 mqrepl: Dispatch eval, msglen=15 seq=0 last=True id=0F00D dup=0
E (770603) esp_ota_ops: not found otadata
W 20:26:10.161 mqrepl: Exception in eval: (-261, 'ESP_ERR_NOT_FOUND')

But my board doesn't reset. I have to do it manually.

Using the framework over SIM800L PPPoS or TCP connection ...

This is not an issue. My apologies if I ask my question here.

I found your very nice framework which covers the needs for a project I am working on. The specific question I would like to ask, if it would work using a a SIM800L GPRS data connection, instead of WiFi.
My project is currently working with the @loboris MP build which is stale since 2018. I am facing some problems which require me to move to a more updated build. As Hardware backbone I am using the T-Call-SIM800.
Some of my problems are related to the RTC in the ESP32, which you have addressed in your build, and some other fixes I am sure would be beneficial as well.
Basically, I am not sure if your v1.12-tve2 or 1.13 build with your MQTT implementation will work with the underlying connection established by the SIM800L. It is my understanding that the @lobo implementation implies C level integration to make it work over PPPoS. Not sure if your build does something similar or assumes to have a full TCP/IP stack available as is the case with WiFi.
I sincerely would appreciate your insight and suggestions to this question, as I am excited to try out your framework.
Thanks in advance.

TypeError: unexpected keyword argument 'ssl'

When running the hello world example here: https://github.com/tve/mqboard/blob/master/mqtt_async/hello-world.py and after converting the dictionary access to use dict['key'] method, I get the following error

Error:

>>> %Run -c $EDITOR_CONTENT
DEBUG:mqtt_async:DNS 192.168.1.158->('192.168.x.xxx', 1883)
INFO:mqtt_async:Connecting to ('192.168.x.xxx', 1883) id=Pico clean=1
DEBUG:mqtt_async:user=asdf passwd-len=10 ssl=None
Traceback (most recent call last):
  File "<stdin>", line 39, in <module>
  File "uasyncio/core.py", line 1, in run_until_complete
  File "uasyncio/core.py", line 1, in run_until_complete
  File "uasyncio/core.py", line 1, in run_until_complete
  File "<stdin>", line 26, in main
  File "/lib/mqtt_async.py", line 609, in connect
  File "/lib/mqtt_async.py", line 189, in connect
  File "/lib/mqtt_async.py", line 28, in open_connection
TypeError: unexpected keyword argument 'ssl'

Micropython version:
MicroPython v1.19.1-824-g30db33d1e on 2023-01-19; Raspberry Pi Pico W with RP2040

Platform:
Raspberry Pi Pico W

rmdir missing 1 required positional argument: 'missing_okay'

I created an empty dir "sd", then tried to remove it.
$ ../mqboard/mqboard --server mqtt.xxxxxx.com --verbose --timeout 60 --port 8883 --tls --prefix aiotcomqtt ls
Connecting to mqtt.xxxxxx.com:8883
Subscribing to aiotcomqtt/mqb/reply/out/TY9CSRko and aiotcomqtt/mqb/reply/err/TY9CSRko
Pub aiotcomqtt/mqb/cmd/eval/TY9CSRko #0 last=True len=123
Received reply on topic 'aiotcomqtt/mqb/reply/out/TY9CSRko' with QoS 1
0.271kB in 0.697s -> 0.388kB/s
2700 board_config.py
2621 boot.py
0 lib/
3644 main.py
0 safemode/
0 sd/
0 src/

$ ../mqboard/mqboard --server mqtt.xxxxxx.com --verbose --timeout 60 --port 8883 --tls --prefix aiotcomqtt rmdir sd
Traceback (most recent call last):
File "../mqboard/mqboard", line 133, in
cli(obj={})
File "/home/fredrick/Development/micropython/mqboard/venv/lib/python3.6/site-packages/click/core.py", line 829, in call
return self.main(*args, **kwargs)
File "/home/fredrick/Development/micropython/mqboard/venv/lib/python3.6/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/home/fredrick/Development/micropython/mqboard/venv/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/fredrick/Development/micropython/mqboard/venv/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/fredrick/Development/micropython/mqboard/venv/lib/python3.6/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/home/fredrick/Development/micropython/mqboard/venv/lib/python3.6/site-packages/click/decorators.py", line 21, in new_func
return f(get_current_context(), *args, **kwargs)
TypeError: rmdir() missing 1 required positional argument: 'missing_okay'

First initial steps working ok

Just wanted to leave a quick note. Following your instructions and running the initial test it appears to be working. Only thing I had to do was (manually) add mqtt user and password to engine.py
self._mqclient.username_pw_set("xxxuserxxx", "xxxxpasswordxxxx")

I will play with your blinky demo next.

$ ./mqboard/mqboard.py --server mqtt.xxxxxxx.com --port 8883 --tls --prefix xxxxxxxx eval '45+876'
921
$ ./mqboard/mqboard.py --server mqtt.xxxxxxx.com --port 8883 --tls --prefix xxxxxxxx eval 'import sys; print(sys.implementation)'
(name='micropython', version=(1, 12, 0), mpy=10757)

image

SSL/TLS Example for mqtt_async.py (ssl_params)

Hi Thorsten,

I'm loving your work - this is an excellent model for remote communication and management of IoT devices - thanks.

I'd be really grateful if you could provide an example of ssl_params that would be required to enable me to use mqboard with an MQTT broker using TLS, please.

Many thanks,

Colin

Error in Hello World example

In https://github.com/tve/mqboard/blob/master/mqtt_async/README.md:

def callback(topic, msg, retained, qos): print(topic, msg, retained, qos)
..
config.subs_cb = callback

while in mqtt_async.py there is:

cb = self._subs_cb(topic, msg, bool(retained), qos, dup)

This results in incorrect number of arguments being called:

function takes 4 positional arguments but 5 were given: exception in handler

This can be easily fixed (in README.md):

def callback(topic, msg, retained, qos, dup): print(topic, msg, retained, qos, dup)

Error building micropython from tve fork

Sorry for the verbose post. While building cloned source (tag v1.12-tve2) it is failing with the below errors...

fredrick@fredrick-Studio-XPS-435MT:~/Development/micropython/micropython-1.12-tve/ports/esp32$ make
PORT_DIR=/home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32/
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
Building with ESP IDF v4
GEN build-GENERIC/sdkconfig.h
mkdir -p build-GENERIC/bootloader//home/fredrick/Development/micropython/esp-idf/components/bootloader/subproject/main/
mkdir -p build-GENERIC/bootloader//home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/
mkdir -p build-GENERIC/bootloader//home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/esp32/
mkdir -p build-GENERIC/bootloader//home/fredrick/Development/micropython/esp-idf/components/log/
mkdir -p build-GENERIC/bootloader//home/fredrick/Development/micropython/esp-idf/components/soc/esp32/
mkdir -p build-GENERIC/bootloader//home/fredrick/Development/micropython/esp-idf/components/soc/src/
mkdir -p build-GENERIC/bootloader//home/fredrick/Development/micropython/esp-idf/components/spi_flash/
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/bootloader_clock.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/bootloader_common.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/bootloader_flash.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/bootloader_flash_config.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/bootloader_init.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/bootloader_random.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/bootloader_utility.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/flash_qio_mode.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/esp_image_format.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/flash_encrypt.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/flash_partitions.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/esp32/bootloader_sha.c
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader_support/src/esp32/secure_boot.c
AR build-GENERIC/bootloader/libbootloader_support.a
CC /home/fredrick/Development/micropython/esp-idf/components/log/log.c
AR build-GENERIC/bootloader/liblog.a
CC /home/fredrick/Development/micropython/esp-idf/components/spi_flash/spi_flash_rom_patch.c
AR build-GENERIC/bootloader/libspi_flash.a
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/cpu_util.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/gpio_periph.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_clk.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_clk_init.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_init.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_periph.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_pm.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_sleep.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_time.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/rtc_wdt.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/sdio_slave_periph.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/sdmmc_periph.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/soc_memory_layout.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/esp32/spi_periph.c
CC /home/fredrick/Development/micropython/esp-idf/components/soc/src/memory_layout_utils.c
AR build-GENERIC/bootloader/libsoc.a
CC /home/fredrick/Development/micropython/esp-idf/components/bootloader/subproject/main/bootloader_start.c
AR build-GENERIC/bootloader/libmain.a
LINK build-GENERIC/bootloader.elf
Create build-GENERIC/bootloader.bin
esptool.py v2.8
Create build-GENERIC/partitions.bin
mkdir -p build-GENERIC/genhdr
GEN build-GENERIC/genhdr/mpversion.h
GEN build-GENERIC/genhdr/moduledefs.h
GEN build-GENERIC/genhdr/qstr.i.last
GEN build-GENERIC/genhdr/qstr.split
GEN build-GENERIC/genhdr/qstrdefs.collected.h
QSTR updated
GEN build-GENERIC/genhdr/qstrdefs.generated.h
GEN build-GENERIC/genhdr/compressed.split
GEN build-GENERIC/genhdr/compressed.collected
Compressed data updated
GEN build-GENERIC/genhdr/compressed.data.h
mkdir -p build-GENERIC/build-GENERIC/
mkdir -p build-GENERIC/drivers/bus/
mkdir -p build-GENERIC/drivers/dht/
mkdir -p build-GENERIC/extmod/
mkdir -p build-GENERIC/extmod/nimble/
mkdir -p build-GENERIC/lib/berkeley-db-1.xx/btree/
mkdir -p build-GENERIC/lib/berkeley-db-1.xx/mpool/
mkdir -p build-GENERIC/lib/embed/
mkdir -p build-GENERIC/lib/littlefs/
mkdir -p build-GENERIC/lib/mp-readline/
mkdir -p build-GENERIC/lib/netutils/
mkdir -p build-GENERIC/lib/oofatfs/
mkdir -p build-GENERIC/lib/timeutils/
mkdir -p build-GENERIC/lib/utils/
mkdir -p build-GENERIC/py/
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/mpstate.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nlr.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nlrx86.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nlrx64.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nlrthumb.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nlrpowerpc.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nlrxtensa.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nlrsetjmp.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/malloc.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/gc.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/pystack.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/qstr.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/vstr.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/mpprint.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/unicode.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/mpz.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/reader.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/lexer.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/parse.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/scope.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/compile.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitcommon.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitbc.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/asmbase.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/asmx64.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitnx64.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/asmx86.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitnx86.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/asmthumb.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitnthumb.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitinlinethumb.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/asmarm.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitnarm.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/asmxtensa.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitnxtensa.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitinlinextensa.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitnxtensawin.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/formatfloat.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/parsenumbase.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/parsenum.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/emitglue.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/persistentcode.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/runtime.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/runtime_utils.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/scheduler.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/nativeglue.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/pairheap.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/ringbuf.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/stackctrl.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/argcheck.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/warning.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/profile.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/map.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/obj.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objarray.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objattrtuple.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objbool.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objboundmeth.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objcell.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objclosure.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objcomplex.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objdeque.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objdict.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objenumerate.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objexcept.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objfilter.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objfloat.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objfun.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objgenerator.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objgetitemiter.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objint.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objint_longlong.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objint_mpz.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objlist.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objmap.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objmodule.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objobject.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objpolyiter.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objproperty.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objnone.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objnamedtuple.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objrange.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objreversed.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objset.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objsingleton.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objslice.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objstr.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objstrunicode.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objstringio.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objtuple.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objtype.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/objzip.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/opmethods.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/sequence.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/stream.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/binary.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/builtinimport.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/builtinevex.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/builtinhelp.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modarray.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modbuiltins.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modcollections.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modgc.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modio.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modmath.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modcmath.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modmicropython.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modstruct.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modsys.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/moduerrno.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/modthread.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/vm.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/bc.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/showbc.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/repl.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/smallint.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/frozenmod.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moduasyncio.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moductypes.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modujson.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modure.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moduzlib.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moduheapq.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modutimeq.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moduhashlib.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moducryptolib.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modubinascii.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/virtpin.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/machine_mem.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/machine_pinbase.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/machine_signal.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/machine_pulse.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/machine_i2c.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/machine_spi.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modbluetooth.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modussl_axtls.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modussl_mbedtls.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modurandom.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moduselect.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/moduwebsocket.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modwebrepl.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/modframebuf.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_blockdev.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_reader.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_posix.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_posix_file.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_fat.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_fat_diskio.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_fat_file.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/vfs_lfs.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/utime_mphal.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../extmod/uos_dupterm.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../lib/embed/abort_.c
CC /home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../lib/utils/printf.c
MPY _boot.py
MPY inisetup.py
MPY apa106.py
MPY neopixel.py
MPY flashbdev.py
MPY upip.py
MPY upip_utarfile.py
MPY ntptime.py
MPY dht.py
MPY onewire.py
MPY ds18x20.py
MPY uasyncio/init.py
MPY uasyncio/core.py
MPY uasyncio/event.py
MPY uasyncio/funcs.py
MPY uasyncio/lock.py
MPY uasyncio/stream.py
MPY webrepl.py
MPY webrepl_setup.py
MPY websocket_helper.py
GEN build-GENERIC/frozen_content.c
CC build-GENERIC/frozen_content.c
CC main.c
CC uart.c
CC gccollect.c
gccollect.c: In function 'gc_collect':
gccollect.c:64:13: warning: unused variable 't0' [-Wunused-variable]
int64_t t0 = esp_timer_get_time();
^
CC mphalport.c
CC fatfs_port.c
CC help.c
CC modutime.c
CC moduos.c
CC machine_timer.c
CC machine_pin.c
CC machine_touchpad.c
CC machine_adc.c
CC machine_dac.c
CC machine_i2c.c
CC machine_pwm.c
CC machine_uart.c
CC modmachine.c
CC modnetwork.c
CC network_lan.c
CC network_ppp.c
CC nimble.c
CC modsocket.c
CC modesp.c
CC esp32_partition.c
CC esp32_rmt.c
CC esp32_ulp.c
CC modesp32.c
CC espneopixel.c
CC machine_hw_spi.c
CC machine_wdt.c
CC mpthreadport.c
CC machine_rtc.c
CC machine_sdcard.c
CC lwip_err.c
CC portnativeglue.c
In file included from portnativeglue.c:74:0:
port_fun.inc:16:1: error: conflicting types for built-in function 'abs' [-Werror]
abs,
^
port_fun.inc:21:1: error: conflicting types for built-in function 'bzero' [-Werror]
bzero,
^
port_fun.inc:32:1: error: conflicting types for built-in function 'isalnum' [-Werror]
isalnum,
^
port_fun.inc:33:1: error: conflicting types for built-in function 'isalpha' [-Werror]
isalpha,
^
port_fun.inc:34:1: error: conflicting types for built-in function 'isascii' [-Werror]
isascii,
^
port_fun.inc:35:1: error: conflicting types for built-in function 'isblank' [-Werror]
isblank,
^
port_fun.inc:36:1: error: conflicting types for built-in function 'iscntrl' [-Werror]
iscntrl,
^
port_fun.inc:37:1: error: conflicting types for built-in function 'isdigit' [-Werror]
isdigit,
^
port_fun.inc:38:1: error: conflicting types for built-in function 'isgraph' [-Werror]
isgraph,
^
port_fun.inc:39:1: error: conflicting types for built-in function 'islower' [-Werror]
islower,
^
port_fun.inc:40:1: error: conflicting types for built-in function 'isprint' [-Werror]
isprint,
^
port_fun.inc:41:1: error: conflicting types for built-in function 'ispunct' [-Werror]
ispunct,
^
port_fun.inc:42:1: error: conflicting types for built-in function 'isspace' [-Werror]
isspace,
^
port_fun.inc:43:1: error: conflicting types for built-in function 'isupper' [-Werror]
isupper,
^
port_fun.inc:45:1: error: conflicting types for built-in function 'labs' [-Werror]
labs,
^
port_fun.inc:51:1: error: conflicting types for built-in function 'memchr' [-Werror]
memchr,
^
port_fun.inc:52:1: error: conflicting types for built-in function 'memcmp' [-Werror]
memcmp,
^
port_fun.inc:53:1: error: conflicting types for built-in function 'memcpy' [-Werror]
memcpy,
^
port_fun.inc:54:1: error: conflicting types for built-in function 'memmove' [-Werror]
memmove,
^
port_fun.inc:56:1: error: conflicting types for built-in function 'memset' [-Werror]
memset,
^
port_fun.inc:65:1: error: conflicting types for built-in function 'strcasecmp' [-Werror]
strcasecmp,
^
port_fun.inc:67:1: error: conflicting types for built-in function 'strcat' [-Werror]
strcat,
^
port_fun.inc:68:1: error: conflicting types for built-in function 'strchr' [-Werror]
strchr,
^
port_fun.inc:69:1: error: conflicting types for built-in function 'strcmp' [-Werror]
strcmp,
^
port_fun.inc:71:1: error: conflicting types for built-in function 'strcpy' [-Werror]
strcpy,
^
port_fun.inc:72:1: error: conflicting types for built-in function 'strcspn' [-Werror]
strcspn,
^
port_fun.inc:73:1: error: conflicting types for built-in function 'strdup' [-Werror]
strdup,
^
port_fun.inc:74:1: error: conflicting types for built-in function 'strftime' [-Werror]
strftime,
^
port_fun.inc:77:1: error: conflicting types for built-in function 'strlen' [-Werror]
strlen,
^
port_fun.inc:79:1: error: conflicting types for built-in function 'strncasecmp' [-Werror]
strncasecmp,
^
port_fun.inc:80:1: error: conflicting types for built-in function 'strncat' [-Werror]
strncat,
^
port_fun.inc:81:1: error: conflicting types for built-in function 'strncmp' [-Werror]
strncmp,
^
port_fun.inc:82:1: error: conflicting types for built-in function 'strncpy' [-Werror]
strncpy,
^
port_fun.inc:83:1: error: conflicting types for built-in function 'strndup' [-Werror]
strndup,
^
port_fun.inc:85:1: error: conflicting types for built-in function 'strrchr' [-Werror]
strrchr,
^
port_fun.inc:87:1: error: conflicting types for built-in function 'strspn' [-Werror]
strspn,
^
port_fun.inc:88:1: error: conflicting types for built-in function 'strstr' [-Werror]
strstr,
^
port_fun.inc:94:1: error: conflicting types for built-in function 'toascii' [-Werror]
toascii,
^
port_fun.inc:95:1: error: conflicting types for built-in function 'tolower' [-Werror]
tolower,
^
port_fun.inc:96:1: error: conflicting types for built-in function 'toupper' [-Werror]
toupper,
^
cc1: error: unrecognized command line option '-Wno-builtin-declaration-mismatch' [-Werror]
cc1: all warnings being treated as errors
/home/fredrick/Development/micropython/micropython-1.12-tve/ports/esp32//../../py/mkrules.mk:63: recipe for target 'build-GENERIC/portnativeglue.o' failed
make: *** [build-GENERIC/portnativeglue.o] Error 1

curdir is not consistent

  • ls shows '/'
  • 'get' uses curdir

Example in safemode:

(master) /h/s/e/mqboard> mqboard --prefix esp32/test -v ls
Connecting to 192.168.0.14:1883
Subscribing to esp32/test/mqb/reply/out/mhCNZUQ8 and esp32/test/mqb/reply/err/mhCNZUQ8
Pub esp32/test/mqb/cmd/eval/mhCNZUQ8 #0 last=True len=123
Received reply on topic 'esp32/test/mqb/reply/out/mhCNZUQ8' with QoS 1
0.165kB in 0.228s -> 0.723kB/s
        2621 boot.py
           0 safemode/

(master) /h/s/e/mqboard> mqboard --prefix esp32/test -v get boot.py
Connecting to 192.168.0.14:1883
Subscribing to esp32/test/mqb/reply/out/QdkzBV9E and esp32/test/mqb/reply/err/QdkzBV9E
Pub esp32/test/mqb/cmd/get/QdkzBV9E/boot.py #0 last=True len=2
Traceback (most recent call last):
  File "/safemode/mqrepl.py", line 313, in _msg_cb
  File "/safemode/mqrepl.py", line 203, in _do_get
OSError: [Errno 2] ENOENT
Aborted!

Library usage with a lan connection

Hi Thorsten,
thank you for the super, super library, which I have been using in my project inetbox2mqtt for a few months now and which really runs very stable and reliable. Not only I but many users are very grateful for this. However, there are now some users who want to use the ESP32 with a LAN adapter for stability reasons. Unfortunately, I am not making much progress in adapting the library for use with a LAN connection. Could you maybe give me some hints on this.
Kind regards
Magnus

OTA on esp32c3

hi tve,

I followed your code in mqrepl.py and implemented ota via ble, when I deploy it to esp32c3 board, following error occurs:

E (68) esp_image: Segment 0 0x3fcd6100-0x3fcd6fa0 invalid: overlaps bootloader stack
E (69) boot: OTA app partition slot 1 is not bootable

the partition table I use is partitions-ota.csv located in micropython.

I wonder if you having any idea regarding this.

Hello World example not working with Mosquitto broker

The Hello World example in https://github.com/tve/mqboard/blob/master/mqtt_async/README.md is not working with Mosquitto broker. Default setting of keepalive is 0, Mosquitto however does not support such setting:

$ mosquitto_pub -p 1883 -h HOST -t 'topic/subtopic' -m elho -u USER -P PASS -k 0                               
Error: Invalid keepalive given, it must be between 5 and 65535 inclusive.

There are two ways how to fix it:

  • either set keepalive to 5 in mqtt_async.py in this section:
    if lw is None:
      keepalive = 0
    
    or
  • set keepalive and will manually in config:
from mqtt_async import MQTTClient, config, MQTTMessage
..
config['keepalive'] = 0
config['will'] = MQTTMessage('special/msg', 'bye')

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.