catalin last edited by catalin
Hi community 🙌
I want to share with you the Pymesh (LoRa Mesh) current development and plans; last release of Pymesh is in v1.20.0.rc7
For starting, this is my Pymesh presentation(workshop) done at TTN Conf Jan 2019 Amsterdam; if you have any questions 🗣
As I've said in a previous mail, currently I'm working on the Border Router feature, I try to explain in a nice micropy script, basically how Pymesh data can be exposed outside of mesh, on Wifi/BLE/Cellular to the ☁.
Not to forget the 📕 were copied here: https://docs.pycom.io/firmwareapi/pycom/network/lora/pymesh.html and https://docs.pycom.io/tutorials/lora/lora-mesh.html with a disclaimer, as Pymesh is included just in RC (development) releases.
But, no worries, 😅 we'll include it in the first official stable.
We're planning in releasing firmware releases with and without Pymesh, due to relatively large (~200KB) code-size.
I'm working at the road-plan for further Pymesh features.
Long-term plan is exposing more openthread features, make tons of tests (lots of nodes, distance); connect Pymesh with Pybytes, optimise power-consumption, security for private Pymesh, profile some KPI (data able to be sent over Pymesh), and of course share all plans with community (basically I will open-source the micropy scripts presented in workshop, have some articles to explain all use-cases).
Just let me know your thoughts, about the further projects, and we could include requirements into official development.
@catalin Thank. That was the trick.
@robert-hh, I'm not sure how it works in Android, rights for using Bluetooth and localisation should be given to the Pymesh app (iOS asks when app is first time started).
Localisation right is required as GPS coords are sent to the node when BLE connection is established; and somehow BLE usage is linked to localisation services, too; honestly I did not investigated this.
@catalin BLE Scanner finds both devices active at the moment, but the pymesh app does not connect.
The Pymesh mobile app searches BLE Servers with name "PyGo*". I suppose pressing
Restart scanbutton doesn't solve situation. Try to use another mobile app, like
nRF Connect) to check if the Lopy is discovered (it should have 2 services advertised). Sometimes Android+iOS have some caching of BLE connections.
Basically, you can't have your own main, as several threads are in the frozen scripts, hence the zombie threads.
Now I am working a frozen Pymesh scripts(as library) which can be used with a user main.py+ config file, hope to be done to be included in next Pymesh firmware release.
@catalin Two question:
- I tried the Pymesh Android app, but it does not get any connections. Where and how does it search for a connection.
- With these standard binary images, how can I change the WiFi settings, e.g. into STA mode and DHCP? The code seems to be executed from _boot.py. If I interrupt is, the normal boot process continues. Funny enough, some of the pymesh stuff continues to run.
@robert-hh Thanks a lot, Robert, for highlighting this malfunction.
I will test this scenario on the latest firmware.
@catalin Two things about the crashes: as long as I have at least two devices in the local mesh, it seems stable. Having just one device running causes a crash each time after a few minutes. Normally, the device just reboots and it will start over. Nor perfect, but acceptable. But after a few hours it will end up with a corrupted flash firmware, causing core dumps like the one below. At that point I have to re-flash the firmware. The file system is not affected.
ets Jun 8 2016 00:22:57 rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff8028,len:8 load:0x3fff8030,len:2156 ho 0 tail 12 room 4 load:0x4009fa00,len:19208 entry 0x400a05f4 Guru Meditation Error: Core 1 panic'ed (InstrFetchProhibited). Exception was unhandled. Core 1 register dump: PC : 0x00000000 PS : 0x00060031 A0 : 0x40083b04 A1 : 0x3ffc13f0 A2 : 0x3ffc5c6c A3 : 0x00800000 A4 : 0x00000000 A5 : 0x00000000 A6 : 0x3ffdd308 A7 : 0x000006f4 A8 : 0x8008456a A9 : 0x0000018c A10 : 0x3ffda984 A11 : 0x3ffdda09 A12 : 0x80098d18 A13 : 0x3ffe32b0 A14 : 0x3ffda974 A15 : 0x3ffdd304 SAR : 0x00000013 EXCCAUSE: 0x00000014 EXCVADDR: 0x00000000 LBEG : 0x4009dc28 LEND : 0x4009dc33 LCOUNT : 0xffffffff Core 1 was running in ISR context: EPC1 : 0x00000000 EPC2 : 0x00000000 EPC3 : 0x00000000 EPC4 : 0x4008b78e Backtrace: 0x00000000:0x3ffc13f0 0x40083b01:0x3ffc1410 0x4000bfed:0x3ffe3320 0x40095da3:0x3ffe3330 0x400d2f7b:0x3ffe3350 0x400d2fc1:0x3ffe33b0 0x4015edfd:0x3ffe33e0 0x400e2af1:0x3ffe3400 0x400ddd48:0x3ffe3420 ================= CORE DUMP START ================= oB0AAAoAAABsAQAA KND9P/Be/j8cYP4/ 8F7+P7Bf/j+lpaWl9Fr8P5xX/D8o0P0/lFf8PxQAAAClpaWlpaWlpSjQ/T8AAAAA BQAAACBQ/j9TZXJ2ZXJzAKWlpaWlpaUAAQAAABxg/j8AAAAApaWlpQUAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABA6v0/qOr9PxDr/T8AAAAAAAAAAAEAAAAAAAAA W0VBPwAAAAC84glAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWlpQ== nDgIQKjhDUAwAAUAAAAAALBf/j8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAANCT+j8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAC8X/4/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
@catalin OK. Thanks. It looks like the LoPy4 devices crash all the time. The FiPy seems stable.
@robert-hh, the micropython scripts which are frozen in those binaries is in the same repo: https://github.com/pycom/pymesh_apps/tree/master/pymesh_micropy_scripts
clicommands can be seen in the code, sorry for not having then documented:
Nicer is to install the Android or iOS mobile app(link opened by TestFlight mobile app).
Regarding the crush, I've pushed the memory heap usage to the max in those binaries, this is solved by the newest IDF_v3.2 from development.
@catalin Onother issue:
I had one LoPy4 with your pymesh image running over night. This morning it was in a reboot loop with messages like these:
Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled. Core 0 register dump: PC : 0x400966f0 PS : 0x00060033 A0 : 0x80094c5a A1 : 0x3ffc09c0 A2 : 0x3ffc1910 A3 : 0x00000000 A4 : 0x3ffc56f4 A5 : 0x000005ab A6 : 0x3ffc5914 A7 : 0x00000000 A8 : 0x3ffe3964 A9 : 0x3ffc0990 A10 : 0x00000001 A11 : 0x00060021 A12 : 0x3ffdc468 A13 : 0x00000001 A14 : 0x000000fe A15 : 0x00060023 SAR : 0x0000001f EXCCAUSE: 0x0000001c EXCVADDR: 0x00000008 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000 Core 0 was running in ISR context: EPC1 : 0x400966f0 EPC2 : 0x00000000 EPC3 : 0x00000000 EPC4 : 0x4008b8b4 Backtrace: 0x400966f0:0x3ffc09c0 0x40094c57:0x3ffc09e0 0x40097675:0x3ffc0a00 0x40083b16:0x3ffc0a10 0x40201af3:0x3ffdc3b0 0x400965b5:0x3ffdc3d0
No clue what happened. Re-flashing it brought it back to normal operation. This is new, because normally these devices are very reliable.
@catalin My question was more, what to do with the actual pymesh firmware images you pubished. They run and connect, but I see no path to use it for other purposes. There is a single > prompt. If I push Ctrl-D at it, I get the message:
Unhandled exception in thread started by <bound_method> Traceback (most recent call last): File "cli.py", line 36, in process EOFError:
So there is a function cli.py, which seems to wait for commands. But which one?
I think, there is the flow of sending pictures across Pymesh also implemented; by sending message
doga 12KB picture of a dog is sent.
More features are to come:
- binary release with
- having included frozen scripts, so a mesh can be started using 3-4 lines of micropython
- any node can be declared as
Border Routerand it can be connected to
Pybytes, or other IoT platform
- any node accepts BLE connections, so using Pymesh mobile app, one can see diagnostics info within the Mesh.
And, of course, we're waiting for more suggestions on Pymesh wishlist.
- binary release with
@catalin So I installed these images https://github.com/pycom/pymesh_apps/tree/master/custom_fw_bin on two LoPy4's and a FiPy. They run, see each other, declare themselves as leader, router, and child, and have chats. But what else? Are these sample images good for anything beyond that?
And yes: they all seem to have a fixed location in Eindhoven. Using a pytrack does not change that.
Small update, the Pymesh iOS app was rebuilt, and it's available again in TestFlight, using the same link: https://testflight.apple.com/join/PIxwbTKp
The Pymesh Android app is in this repo.
Also builds with Pymesh included are here, the binaries include micropython scripts.
ricardolima last edited by
@catalin Thank you for your quick answer. I will wait a bit to see what that news firmwares brings :D
Does this answers your question?
On a side note, I am working on some micropython scripts on which any Pymesh node can connect to Pybytes, if connection is done then they declared itself as Border Router, the other nodes see they have a BR in network (as a new IPv6 appears on them). Probably I'll release these in the next couple of weeks.
Also, a separate Pymesh firmware binary release will be done next week (separate from already existing flavours development/stable/pybytes).
ricardolima last edited by
Any news about pymesh ? Any example how the border router can connect to the internet and provide it to the rest of the network ?
catalin last edited by catalin
I've released a beta version of the Pymesh mobile app:
- iOS(>v12.1, TestFlight app from Apple is required): https://testflight.apple.com/join/PIxwbTKp
- Android(>v4.4): https://github.com/pycom/pymesh_apps/tree/master/mobile_app/android
In this repo there are firmware binaries (but latest development should work too), and micropy scripts (but https://github.com/pycom/pycom-libraries/tree/master/lib/pymesh should be also fine).
@rfinkers yes, it should work fine with L01, due to increased RAM+Flash.