{"id":720,"date":"2026-05-23T08:21:35","date_gmt":"2026-05-23T16:21:35","guid":{"rendered":"https:\/\/salemdata.net\/johnpress\/?p=720"},"modified":"2026-05-24T15:55:06","modified_gmt":"2026-05-24T23:55:06","slug":"raspberry-pis-using-reticulum-via-bluetooth","status":"publish","type":"post","link":"https:\/\/salemdata.net\/johnpress\/?p=720","title":{"rendered":"Raspberry Pis Using Reticulum Via Bluetooth"},"content":{"rendered":"<p>Two \\$17 Raspberry Pi Zero 2 W units exchange encrypted poems over Reticulum using Bluetooth only.\u00a0 Here&#8217;s a high precision re-enactment of the real time communications.<\/p>\n<div class=\"reticulum-replay-centered\"><iframe src=\"https:\/\/salemdata.us\/dev\/paired_ble_poetry_replay_20260522_Fri_193030.html\"><\/iframe><\/div>\n<p><a href=\"https:\/\/reticulum.network\/\">Reticulum<\/a> is a protocol that encrypts content and destination providing one of the most secure way communicating currently available.<\/p>\n<figure id=\"attachment_721\" aria-describedby=\"caption-attachment-721\" style=\"width: 310px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-721\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/20260522_170545_Fri.png\" alt=\"Mark Qvist\" width=\"310\" height=\"462\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/20260522_170545_Fri.png 310w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/20260522_170545_Fri-201x300.png 201w\" sizes=\"auto, (max-width: 310px) 100vw, 310px\" \/><figcaption id=\"caption-attachment-721\" class=\"wp-caption-text\">Mark Qvist<\/figcaption><\/figure>\n<p>It is the brainchild of Mark Qvist (<a href=\"https:\/\/github.com\/markqvist\">GitHub<\/a>) who has devoted much of his adult life and savings to this project.\u00a0 Mark&#8217;s presentation <em>Reticulum: Unstoppable Networks for The People<\/em> (43 minutes) is available at the <a href=\"https:\/\/media.ccc.de\/about.html\">Chaos Computer Club<\/a>&#8216;s <a href=\"https:\/\/media.ccc.de\/v\/38c3-reticulum-unstoppable-networks-for-the-people#t=73\">media site<\/a> and on <a href=\"https:\/\/www.youtube.com\/watch?v=pnyuSWy66cI\">YouTube<\/a>.<\/p>\n<p>The main differentiation between Reticulum and <a href=\"https:\/\/meshtastic.org\/\">Meshtastic<\/a> or <a href=\"https:\/\/meshcore.io\/\">Meshcore<\/a> is that:<\/p>\n<ul>\n<li>Reticulum is a protocol, it is not married to a specific transmission method, e.g. LoRa radio<\/li>\n<li>Reticulum has encryption all through the stack, so any prying eyes see nothing but garbage.<\/li>\n<li>Reticulum is based on Python<\/li>\n<\/ul>\n<p>I became fascinated with this concept, especially in light of reading about the U.S. government using operation <a href=\"https:\/\/en.wikipedia.org\/wiki\/Stingray_use_in_United_States_law_enforcement\">Stingray<\/a> and trying to manipulate public protests by controlling the cellular service. Communication outside conventional carrier-controlled infrastructure matters in emergencies, remote areas, field work, and situations where centralized networks are unavailable, unreliable, or intentionally disrupted. My thought was that if participants could communicate outside of a government-controlled carriers, e.g. cell phone providers, the playing field would be a little more even.\u00a0 Especially if a government decides to shut down communication hoping to disrupt the protest.\u00a0 So I started investigating Reticulum and a popular device, the <a href=\"https:\/\/wiki.lilygo.cc\/products\/t-beam-series\/t-beam-supreme\/\">LilyGO T-Beam SUPREME<\/a> &#8211; a \\$42 communicator packing a wallop of electronic features.\u00a0 Its processor is an ESP32-S and the unit has 0.5 MB of RAM memory.<\/p>\n<figure id=\"attachment_733\" aria-describedby=\"caption-attachment-733\" style=\"width: 82px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-733 size-medium\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/DSC_5024_v1-scaled-e1779541897153-82x300.jpg\" alt=\"\" width=\"82\" height=\"300\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/DSC_5024_v1-scaled-e1779541897153-82x300.jpg 82w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/DSC_5024_v1-scaled-e1779541897153-438x1600.jpg 438w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/DSC_5024_v1-scaled-e1779541897153-420x1536.jpg 420w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/DSC_5024_v1-scaled-e1779541897153-560x2048.jpg 560w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/05\/DSC_5024_v1-scaled-e1779541897153.jpg 700w\" sizes=\"auto, (max-width: 82px) 100vw, 82px\" \/><figcaption id=\"caption-attachment-733\" class=\"wp-caption-text\">LilyGO! T-Beam SUPREME<\/figcaption><\/figure>\n<p>For the T-Beam, the practice is to run a Reticulum instance on a hand held device, e.g. Android phone, and then the Reticulum instance on the device connects to the T-Beam via Bluetooth and uses the T-Beam&#8217;s ability to send packets over Lora radio.\u00a0 The T-Beam is used as a modem.\u00a0 The more I learned about the T-Beam, the more I began to wonder: why not just run Reticulum on the T-Beam and have it communicate with the hand-held device via a Bluetooth interface.\u00a0 The problem is Reticulum is based on Python and Python requires a large infrastructure, so running Python on an ESP32, the processor used for the T-Beam, is problematic, if possible.\u00a0 Development on the ESP32 is traditionally C++, though Rust is starting to make inroad (hurrah! &#8212; see YouTuber <a href=\"https:\/\/www.youtube.com\/@therustybits\">The Rusty Bits<\/a> video <a href=\"https:\/\/www.youtube.com\/watch?v=l75TfMOPG1g\">From Zero to ESP32 Bootloader in Embedded Rust<\/a>). Well, it turned out there did not seem to be much in practice using that paradigm.\u00a0 So, a developer named <a href=\"https:\/\/github.com\/torlando-tech\/\">Torlando<\/a> developed a Bluetooth protocol but then diverted his attention to building a Reticulum client for hand-held devices: <a href=\"https:\/\/github.com\/torlando-tech\/columba\">Columba<\/a>.\u00a0 I believe having the link between the hand-held device and the T-Beam would be superior if each were its own instance of Reticulum, so I took the reins and with ChatGPT &amp; Codex undertook to build a Bluetooth interface for Reticulum.\u00a0 I succeeded in getting the T-Beams to communicate with each other via Bluetooth, and then wondered&#8230; why not have Raspberry Pis communicate via Reticulum through Bluetooth.\u00a0 Granted, Bluetooth has a very limited range; however, Bluetooth is already built into most Pis, even the \\$17 Pi Zero 2 W, so with no capital outlay, you can have a demonstration of Reticulum running between two \\$17 units.\u00a0 Total cost \\$54 (adding \\$20 for two power plugs).<\/p>\n<p>But what about the Raspberry Pi?\u00a0 While Reticulum can run on a Raspberry Pi, the avenues of sending packets is limited.\u00a0 You can use the Ethernet (TCP\/IP) if your Pi has network connectivity or purchase a Lora Radio hat and grapple with getting the hat to work with a Reticulum instance on the Pi.\u00a0 The concept of having two inexpensive Rapsberry Pi Zero 2 W exchange text over a fully encrypted Reticulum network with no additional hardware was seductive.\u00a0 Reticulum was built in Python, aka &#8220;the snake language&#8221;.\u00a0 I&#8217;m a Perl enthusiast and have become fond of Rust. So, a compromise is Reticulum built on C++.\u00a0 I found a project by Chad Attermann where he implemented the Reticulum protocol using C++, the project is called <a href=\"https:\/\/github.com\/attermann\/microReticulum\">microReticulum<\/a>.\u00a0 The ESP32-S3 chip has <strong data-start=\"733\" data-end=\"756\">512 KB on-chip SRAM<\/strong> [Static Random Access Memory], per Espressif\u2019s official ESP32-S3 <a href=\"https:\/\/documentation.espressif.com\/api\/resource\/doc\/file\/rz94aWY3\/FILE\/esp32-s3_datasheet_en.pdf?utm_source=chatgpt.com\">datasheet<\/a>.<sup id=\"fnref1\"><a href=\"#fn1\">1<\/a><\/sup> Since microReticulum is written in C++, it occupies a much smaller footprint making it ideal for running inside an ESP32.<sup id=\"fnref2\"><a href=\"#fn2\">2<\/a><\/sup> So, a new Bluetooth interface for Reticulum would need to be written in C++, not Python.\u00a0 Building such is what I undertook and succeeded in. (See the C++_migration <a href=\"https:\/\/salemdata.net\/repo\/jlpoole\/ble-reticulum\/src\/branch\/c%2B%2Bmigration\">branch<\/a> my <a href=\"https:\/\/salemdata.net\/repo\/jlpoole\/ble-reticulum\">fork<\/a> of Torlando&#8217;s project <a href=\"https:\/\/github.com\/torlando-tech\/ble-reticulum\">ble-reticulum<\/a>.)<\/p>\n<p>I had tested Torlando&#8217;s Python based ble-reticulum project using Reticulum based on Python on two Raspberry Pi Zero 2Ws as a proof that the interface worked.\u00a0 Now that I had a C++ version of the Bluetooth interface, I mused: why not run Chad Attermann&#8217;s C++ version of Reticulum and integrate my C++ BLE Bluetooth interface so I have two inexpensive Raspberry Pi units running a Reticulum link?\u00a0 Well, that&#8217;s just what I did.<\/p>\n<p>In my T-Beam development, I have been creating a variety of exercises to test and prove components of the T-Beam, so in <a href=\"https:\/\/salemdata.net\/repo\/jlpoole\/microReticulumTbeam\/src\/branch\/feature\/fieldtest-beacon-sd-provision\/exercises\/306_microReticulum_ble_file_transfer_oled\">Exercise 306_microReticulum_ble_file_transfer_oled<\/a>, I branched off and created programs that could run on the Pi Zero and send each other fixed texts, e.g. poems.\u00a0 In preparation for this post, I thought the reader might want to see a real-time rendition of two Raspberry Pis using Reticulum over Bluetooth, and that, in turn, ended up being a detour to create a scrolling side-by-side window, the subject of another <a href=\"https:\/\/salemdata.net\/johnpress\/?p=724\">post<\/a>.<\/p>\n<p>At the top of this post are logs from a 60 second run.\u00a0 Note that it takes several seconds, e.g. 12 seconds, for the two units to negotiate their roles and finally start transmitting their payloads to each other.\u00a0 This significant delay is especially why I felt a user should see a real time connection &#8212; this sets expectations that a Bluetooth connection does not immediately start working.\u00a0 The demonstration also shows in real time the transmission speed.\u00a0 <\/p>\n<p>I have compiled binaries identified by what poem<sup id=\"fnref3\"><a href=\"#fn3\">3<\/a><\/sup>  they sent available as follows.\u00a0 Here&#8217;s an install and requirements page (<a href=\"https:\/\/salemdata.net\/public\/rpi\/raspberrypi_install.html\">HTML<\/a> <a href=\"https:\/\/salemdata.net\/public\/rpi\/raspberrypi_install.md\">Markdown<\/a>).\u00a0 All you need are two Raspberry Pis running Raspbian Trixie.<\/p>\n<ul>\n<li><a href=\"https:\/\/salemdata.net\/public\/rpi\/little_boy_blue\">Little Boy Blue<\/a> (644k)<\/li>\n<li><a href=\"https:\/\/salemdata.net\/public\/rpi\/childrens_hour\">The Children&#8217;s Hour<\/a> (644k)<\/li>\n<\/ul>\n<p>I have the code staged in my own Forgejo; however, access is restricted only to registered users since AI bots were merciless in hitting the server.\u00a0 Submit a moderated comment (it will not be published) with your email address and preferred username if you would like access.  With it, you can build your own binaries, e.g. sending what&#8217;s left of the United States Constitution.<\/p>\n<hr \/>\n<ol class=\"footnotes\">\n<li id=\"fn1\">The LILYGO T-Beam Supreme board uses an ESP32-S3FN8 and adds\/lists 8 MB PSRAM [Pseudo-Static Random Access Memory] and 8 MB flash, which are separate from the 512 KB internal SRAM. SRAM is the chip\u2019s fast workbench. PSRAM is a larger side table. Flash is the filing cabinet. <a href=\"#fnref1\">\u21a9<\/a><\/li>\n<li id=\"fn2\">See discussion at <a href=\"https:\/\/github.com\/attermann\/microReticulum\/discussions\/16\">https:\/\/github.com\/attermann\/microReticulum\/discussions\/16<\/a><a href=\"#fnref2\">\u21a9<\/a><\/li>\n<li id=\"fn3\">Eugene Field, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Little_Boy_Blue_(poem)\">Little Boy Blue (1888).<\/a> Henry Wadsworth Longfellow, <a href=\"https:\/\/www.poetryfoundation.org\/poems\/44628\/the-childrens-hour-56d223ca55069\">The Children&#8217;s Hour (1860)<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Two \\$17 Raspberry Pi Zero 2 W units exchange encrypted poems over Reticulum using Bluetooth only.\u00a0 Here&#8217;s a high precision re-enactment of the real time communications. Reticulum is a protocol that encrypts content and destination providing one of the most secure way communicating currently available. It is the brainchild of Mark Qvist (GitHub) who has [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":749,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[132,131,24,130,121],"tags":[],"class_list":["post-720","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bluetooth","category-microreticulum","category-raspberry-pi-zero-2-w","category-reticulum","category-t-beam"],"_links":{"self":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=720"}],"version-history":[{"count":24,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/720\/revisions"}],"predecessor-version":[{"id":756,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/720\/revisions\/756"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/media\/749"}],"wp:attachment":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}