<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>esp32 - Hard Wired</title>
	<atom:link href="https://www.hardwired.dev/tag/esp32/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hardwired.dev</link>
	<description></description>
	<lastBuildDate>Sun, 26 Jul 2026 19:01:21 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://www.hardwired.dev/wp-content/uploads/2022/10/android-chrome-256x256-1-150x150.png</url>
	<title>esp32 - Hard Wired</title>
	<link>https://www.hardwired.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Companion MeshCore přes WiFi: mesh z domova i z práce</title>
		<link>https://www.hardwired.dev/2026/07/26/companion-meshcore-pres-wifi-mesh-z-domova-i-z-prace/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sun, 26 Jul 2026 19:01:21 +0000</pubDate>
				<category><![CDATA[HAM]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[Heltec]]></category>
		<category><![CDATA[lora]]></category>
		<category><![CDATA[MeshCore]]></category>
		<category><![CDATA[vpn]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3105</guid>

					<description><![CDATA[<p>Bluetooth companion má jednu nepříjemnou vlastnost. Musíte u něj stát. Deska leží doma na parapetu, kde má rozumný výhled na &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/07/26/companion-meshcore-pres-wifi-mesh-z-domova-i-z-prace/">Companion MeshCore přes WiFi: mesh z domova i z práce</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Bluetooth companion má jednu nepříjemnou vlastnost. Musíte u něj stát.</p>
<p>Deska leží doma na parapetu, kde má rozumný výhled na město a slušnou slyšitelnost do meshe, ale vy jste v práci a mobil se k ní přes BLE nedostane. Řešení existuje: nechat nódu viset na domácí WiFi, na routeru jí dát pevnou IP a z venku se do domácí sítě dostat přes VPN. MeshCore klient pak místo Bluetooth otevře TCP spojení na tu adresu a chová se, jako byste seděli vedle desky.</p>
<p>Háček je v tom, že tenhle firmware si musíte upéct sami. Počítejte s hodinou práce, když půjde všechno hladce.</p>
<h2>Proč to webflasher neumí</h2>
<p>Otevřete si flasher.meshcore.io, vyberete Heltec v3 a dostanete pět rolí: Companion Bluetooth, Companion USB, Repeater, Room Server a KISS Radio Modem. WiFi varianta tam prostě není.</p>
<p>Důvod je banální a zároveň otravný. SSID a heslo se u MeshCore vkládají jako build flagy při kompilaci, takže výsledná binárka obsahuje přihlašovací údaje k vaší síti napevno. Webflasher rozdává jeden a tentýž soubor všem, takže nemá jak vaše údaje dovnitř dostat. Buď si to zkompilujete, nebo máte smůlu. Kompilaci vám nikdo neušetří. Samotné nahrání do desky ale z prohlížeče udělat jde a k tomu se dostanu níž.</p>
<p>Druhá věc, kterou je dobré vědět předem: companion firmware má typicky zakompilované jen jedno rozhraní naráz, jak píše README k meshcore-cli. Když si postavíte WiFi build, o Bluetooth přijdete. Čip za to nemůže, ESP32-S3 zvládá obojí naráz. Jde o způsob, jakým je firmware poskládaný. Komunitní forky to obcházejí a strkají BLE i TCP do jedné binárky s přepínáním přímo na displeji, jenže tím se dostáváte mimo hlavní větev projektu.</p>
<h2>Co budeš potřebovat</h2>
<p>Heltec WiFi LoRa 32 V3, USB-C kabel a stroj s Linuxem. Dál buď Docker, nebo PlatformIO – podle toho, kterou cestu zvolíte. A pak samozřejmě funkční VPN do domácí sítě, ale ta je zvláštní kapitola a předpokládám, že WireGuard nebo Tailscale už doma běží.</p>
<p>Ještě jedna věc předem: rozmyslete si frekvenci. Pro Česko je to 869,525 MHz, pokud vaše lokální komunita nepoužívá alternativu 868,731 MHz. Ověřte si to, než začnete kompilovat, protože špatné pásmo znamená nódu, která sice svítí a hlásí připojení, ale nikoho neslyší.</p>
<h2>Cesta první: Docker skript</h2>
<p>Nejrychlejší varianta je repozitář <code>ilikehamradio/meshcore_heltecv3_wifi</code>. Shellový skript, který si v Dockeru natáhne MeshCore, zapatchuje <code>platformio.ini</code> vašimi údaji, zkompiluje a volitelně rovnou naflashuje.</p>
<pre><code class="language-bash">git clone https://github.com/ilikehamradio/meshcore_heltecv3_wifi
cd meshcore_heltecv3_wifi
chmod +x buildFirmware.sh
./buildFirmware.sh</code></pre>
<p>Skript je interaktivní. Zeptá se na region (u nás volba 4, Europe/UK), na SSID a heslo, heslo maskuje hvězdičkami. Pak nabídne flashnutí připojené desky a případně kompletní erase flash paměti před zápisem.</p>
<p>Výstupem je <code>firmware-merged.bin</code> v adresáři, odkud jste skript spustili. Ten soubor obsahuje heslo k vaší WiFi v čitelné podobě, takže ho nikam nenahrávejte a po ověření funkčnosti radši smažte. Autor na to v README výslovně upozorňuje a má pravdu.</p>
<p>Kdyby flash sám neproběhl, jde to ručně:</p>
<pre><code class="language-bash">esptool --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 write_flash 0x0 firmware-merged.bin</code></pre>
<p>Když deska nereaguje, podržte BOOT, ťukněte RESET a zkuste znovu.</p>
<h2>Cesta druhá: ručně přes PlatformIO</h2>
<p>Pokud Docker nechcete nebo potřebujete pinovat konkrétní verzi firmwaru, sáhnete přímo do zdrojáků. Naklonujte MeshCore a otevřete <code>variants/heltec_v3/platformio.ini</code>. Uvnitř najdete blok:</p>
<pre><code class="language-ini">[env:Heltec_v3_companion_radio_wifi]
extends = Heltec_lora32_v3
build_flags =
    ${Heltec_lora32_v3.build_flags}
    -D MAX_CONTACTS=100
    -D MAX_GROUP_CHANNELS=8
    -D DISPLAY_CLASS=SSD1306Display
    -D WIFI_DEBUG_LOGGING=1
    -D WIFI_SSID=&quot;&lt;&lt;SSID&gt;&gt;&quot;
    -D WIFI_PWD=&quot;&lt;&lt;WIFI-PASS&gt;&gt;&quot;</code></pre>
<p>Placeholdery nahradíte svými hodnotami, nastavíte <code>FIRMWARE_VERSION</code> a pustíte build:</p>
<pre><code class="language-bash">export FIRMWARE_VERSION=1.7.3
./build.sh build-firmware Heltec_v3_companion_radio_wifi</code></pre>
<p>Ve VS Code s rozšířením PlatformIO je to ještě pohodlnější. Dole na liště přepnete prostředí na <code>Heltec_v3_companion_radio_wifi</code> a kliknete na upload. Český návod na meshcore.cz to popisuje krok za krokem včetně screenshotů, pokud vám vyhovuje klikací postup.</p>
<p>Nechte si <code>WIFI_DEBUG_LOGGING=1</code> zapnuté. Ušetří vám to nervy v okamžiku, kdy se deska k síti nepřipojí a vy budete chtít vědět proč.</p>
<h2>Flashnout z prohlížeče, i když je binárka vlastní</h2>
<p>Tuhle cestu jsem nakonec volil sám a je ze všech nejpohodlnější. Zkompilujete si firmware kdekoliv, třeba na serveru přes SSH, přenesete si <code>.bin</code> na notebook a zbytek odbavíte v Chromu.</p>
<p>Na flasher.meshcore.io sjeďte v seznamu rolí úplně dolů. Pod nabídkou hotových buildů je položka Custom Firmware, která bere <code>.bin</code> soubory z disku pro ESP32 zařízení a <code>.zip</code> pro nRF52. Vyberete svůj soubor, kliknete na připojení, prohlížeč se zeptá na sériový port a je hotovo.</p>
<p>Funguje to přes Web Serial API, takže potřebujete Chrome nebo Edge. Firefox a Safari vás nepustí dál.</p>
<p>Jedna past tady je. Pokud desku flashujete napoprvé nebo po kompletním erase, nahrajte merged binárku, tedy soubor s příponou <code>-merged.bin</code>, protože obsahuje i bootloader a tabulku oddílů. Na desce, kde už MeshCore běžel, stačí obyčejný <code>firmware.bin</code>. Docker skript z předchozí kapitoly vyrábí právě merged variantu, takže s ním jste na správné straně vždycky.</p>
<p>Oproti esptoolu ušetříte hledání správného <code>/dev/ttyUSB</code> a psaní adresy <code>0x0</code>. Pro mě rozhodl fakt, že build běží na Linuxu ve sklepě a flashuju z Macu u stolu.</p>
<h2>Najít IP a připojit se</h2>
<p>Po flashnutí a restartu se deska sama přihlásí k nastavené síti. Otevřete administraci routeru, najděte seznam připojených klientů a vyhledejte její IP adresu. Rovnou tam desce nastavte DHCP rezervaci podle MAC adresy, jinak vám adresa při příštím výpadku proudu uteče a z práce se budete připojovat naslepo.</p>
<p>Companion přes WiFi naslouchá na TCP portu <strong>5000</strong>. Potvrzuje to jak dokumentace k <code>SerialWifiInterface</code>, tak výchozí hodnota přepínače <code>-p</code> v meshcore-cli a příklad v knihovně meshcore.js.</p>
<p>Ověřit to jde nejrychleji z příkazové řádky:</p>
<pre><code class="language-bash">meshcore-cli -t 192.168.1.42 -p 5000</code></pre>
<p>Pokud naskočí interaktivní prompt a vypíše kontakty, máte hotovo. V mobilní aplikaci pak místo párování přes Bluetooth zvolíte TCP připojení a zadáte IP s portem. Přes VPN to funguje stejně, jen adresa musí být dosažitelná z tunelu.</p>
<h2>Když něco nefunguje</h2>
<p>Deska se nepřipojí k WiFi a na displeji nic. Nejčastěji jde o překlep v SSID nebo o síť běžící čistě na 5 GHz. ESP32-S3 umí jenom 2,4 GHz, takže pokud máte na routeru oba pásma pod jedním jménem a klientovi se nepodaří chytit dvojkovku, neuvidíte nic. Připojte se sériovou konzolí na 115200 baud a přečtěte si, co firmware hlásí.</p>
<p>Spojení naváže, ale komunikace přes room server zlobí. Tady narazíte na známý problém: v issue #1078 uživatel popisuje, že companion připojený přes TCP se k jeho room serveru přihlásí, zprávy přijímá, ale odeslat je nedokáže. Stejné chování hlásí z Windows aplikace, z Python CLI i z Androidu, zatímco přes Bluetooth funguje všechno normálně. Vypadá to na chybu v TCP implementaci firmwaru.</p>
<p>Přiznám se, že tohle mě zabrzdilo. Původně jsem měl WiFi companion za hotovou věc, kterou stačí zkompilovat a jede. Pak jsem tohle issue přečetl a došlo mi, proč MeshCore sám označuje WiFi podporu za experimentální. Ta poznámka v dokumentaci není zdvořilostní. Pro běžný chat a sledování meshe to sedí, na room servery bych zatím spoléhal opatrněji.</p>
<p>Poslední drobnost: firmware si po sobě neuklidí zapečené heslo. Když desku prodáte, půjčíte nebo pošlete kamarádovi, přeflashněte ji čistou binárkou. Vytáhnout SSID a heslo z flash paměti ESP32 je práce na pět minut pro každého, kdo má esptool a chuť.</p>
<p>Jinak je to slušný upgrade. Nóda visí na parapetu a mesh mám na dosah i z kanceláře. Přesně kvůli tomu jsem do toho šel.</p>
<h2>Zdroje</h2>
<ul>
<li><a href="https://flasher.meshcore.io">flasher.meshcore.io</a> – oficiální webflasher přes Web Serial API, včetně volby Custom Firmware</li>
<li><a href="https://flasher.meshcore.io/heltec-v3/">flasher.meshcore.io/heltec-v3</a> – seznam rolí pro Heltec v3</li>
<li><a href="https://github.com/ilikehamradio/meshcore_heltecv3_wifi">ilikehamradio/meshcore_heltecv3_wifi</a> – Docker build skript</li>
<li><a href="https://meshcore.ca/meshcore/firmware-heltec-v3-wifi/">meshcore.ca – Heltec V3 Wi-Fi Firmware</a> – manuální build postup</li>
<li><a href="https://meshcore.cz/wifi_firmware">meshcore.cz/wifi_firmware</a> – český návod přes VS Code</li>
<li><a href="https://github.com/meshcore-dev/MeshCore/issues/1078">MeshCore issue #1078</a> – problém s room serverem přes TCP</li>
<li><a href="https://github.com/meshcore-dev/meshcore-cli">meshcore-cli</a> – CLI klient přes BLE, TCP a sériovou linku</li>
</ul>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F07%2F26%2Fcompanion-meshcore-pres-wifi-mesh-z-domova-i-z-prace%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/07/26/companion-meshcore-pres-wifi-mesh-z-domova-i-z-prace/">Companion MeshCore přes WiFi: mesh z domova i z práce</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MeshCore v praxi: jak v Česku postavit vlastní LoRa uzel a nezapadnout</title>
		<link>https://www.hardwired.dev/2026/05/16/meshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sat, 16 May 2026 09:30:13 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[HAM]]></category>
		<category><![CDATA[18650]]></category>
		<category><![CDATA[2-byte path hash]]></category>
		<category><![CDATA[3D tisk]]></category>
		<category><![CDATA[868 MHz]]></category>
		<category><![CDATA[alternativní síť]]></category>
		<category><![CDATA[bastlení]]></category>
		<category><![CDATA[blackout]]></category>
		<category><![CDATA[brno]]></category>
		<category><![CDATA[českou komunita]]></category>
		<category><![CDATA[companion]]></category>
		<category><![CDATA[CZFree.Net]]></category>
		<category><![CDATA[decentralizace]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[FIT VUT]]></category>
		<category><![CDATA[Flatpak]]></category>
		<category><![CDATA[GTK4]]></category>
		<category><![CDATA[ham]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[Heltec V3]]></category>
		<category><![CDATA[Heltec V4]]></category>
		<category><![CDATA[internet věcí]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[Jindřich Skácel]]></category>
		<category><![CDATA[Jiří Eischmann]]></category>
		<category><![CDATA[krizová komunikace]]></category>
		<category><![CDATA[krok za krokem]]></category>
		<category><![CDATA[LiFePO4]]></category>
		<category><![CDATA[LilyGo T-Deck]]></category>
		<category><![CDATA[Linux klient]]></category>
		<category><![CDATA[lora]]></category>
		<category><![CDATA[low power]]></category>
		<category><![CDATA[maker komunita]]></category>
		<category><![CDATA[mesh]]></category>
		<category><![CDATA[mesh síť]]></category>
		<category><![CDATA[MeshCore]]></category>
		<category><![CDATA[Meshtastic]]></category>
		<category><![CDATA[Meshy]]></category>
		<category><![CDATA[návod]]></category>
		<category><![CDATA[off-grid]]></category>
		<category><![CDATA[off-grid komunikace]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[openalt]]></category>
		<category><![CDATA[P2P]]></category>
		<category><![CDATA[packet radio]]></category>
		<category><![CDATA[peer to peer]]></category>
		<category><![CDATA[radioamatérství]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[repeater]]></category>
		<category><![CDATA[room server]]></category>
		<category><![CDATA[SenseCAP]]></category>
		<category><![CDATA[sítě nezávislé na infrastruktuře]]></category>
		<category><![CDATA[solární napájení]]></category>
		<category><![CDATA[T-Echo]]></category>
		<category><![CDATA[T1000-E]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3070</guid>

					<description><![CDATA[<p>Na střeše budovy Red Hatu v Brně-Medlánkách stojí krabička za pár tisíc, která dokáže to, co před dvěma lety zvládla &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/16/meshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout/">MeshCore v praxi: jak v Česku postavit vlastní LoRa uzel a nezapadnout</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Na střeše budovy Red Hatu v Brně-Medlánkách stojí krabička za pár tisíc, která dokáže to, co před dvěma lety zvládla jen profesionální infrastruktura: spolehlivě doručit zprávu přes půl republiky bez jediného mobilního operátora. Jmenuje se <em>techpark.meshcore.cz</em> a je to jeden z uzlů, na kterých teď stojí česká MeshCore síť.</p>
<p>V <a href="https://www.hardwired.dev/2025/07/20/meshcore-off-grid-komunikaci-prostrednictvim-lora-mesh-siti/">minulém článku</a> jsme si vysvětlili, <em>proč</em> MeshCore existuje. Tohle je díl o tom, jak se do něj reálně připojit, co koupit, čeho se v české komunitě vyvarovat a proč není dobrý nápad nechávat na síti běžet vlastního pingovacího bota.</p>
<h2>Co se za poslední čtyři měsíce změnilo</h2>
<p>Když jsme o MeshCore psali loni v červenci, byla to spíš čerstvá zajímavost než infrastruktura. Mapa repeaterů byla řídká, návody chyběly, lidi tipovali, jestli se z toho stane další zaprášený meshtasticový pokus, nebo něco trvalejšího.</p>
<p>Stalo se to druhé. Mezi únorem a dubnem 2026 česká síť přerostla sama sebe. Jiří Eischmann, který má na blogu jeden z nejčtenějších českých textů o MeshCore, to popisuje jednoduše: sever Brna je tak hustě pokrytý, že mu na jednu zprávu odpoví klidně šest repeaterů najednou. Spojení Brno–Hradec Králové, které ještě v únoru chodilo jen přes jižní trasu Děvín–Hostýnské vrchy–Praděd, teď chodí severní cestou Babí lom–Orlické hory a zprávu i s potvrzením doručí během několika sekund. A když je někdo na Ještědu, dokáže paket skočit až přes Brdy – jeden hop na víc než sto kilometrů.</p>
<p>Síť se za tu dobu posunula i na úrovni firmwaru. Verze 1.15 vyšla 19. dubna 2026 a přinesla podporu pro Heltec V4.3, OTA aktualizace pro nRF52 desky přes mobilní aplikaci a <a href="https://blog.meshcore.io/2026/04/19/release-1-15-0">pár změn chování</a>, které stojí za přečtení, než člověk začne flashovat. Heltec V4.3 navíc umí ovládat FEM hardware, což komunitní buildy jako EasySkyMesh 14.1 dovedly až na 5,5 mA klidového proudu. Pro solární repeater je to zásadní detail.</p>
<p>A pak je tu jedna věc, která komunitu poslední tři měsíce zaměstnává nejvíc.</p>
<h2>Kampaň 2-byte: proč si po prvním flashi musíš změnit jednu položku v menu</h2>
<p>Když dva uzly v síti vygenerují klíče, jejichž první bajt náhodou koliduje, je problém. Cesty (path) v MeshCore se počítají z hashe veřejného klíče a jednobajtová verze umí adresovat jen 256 unikátních prefixů.</p>
<p>V březnu 2026 už v české síti žádné úplně volné prefixy nebyly. Síť rostla rychleji, než byl protokol původně navržený.</p>
<p>Řešení přišlo s firmwarem 1.14. Dvoubajtový hash sníží počet možných hopů (z 64 na 32), ale dá síti 65 535 unikátních prefixů – tedy řádově dost na to, aby kolize přestaly být problém. Česká komunita to vzala jako koordinovanou kampaň. Provozovatelé repeaterů jeden po druhém aktualizovali firmware a od konce dubna je 2B nastavení reálným standardem.</p>
<p>Pro koncového uživatele to znamená jednu položku v menu. Po prvním flashi otevřeš v aplikaci MeshCore <em>Experimental Settings</em> a <em>Default Path Hash Size</em> přepneš na <strong>2 bytes</strong>. „V experimentálním nastavení si teď nastavte Výchozí velikost hashe cesty na 2b,&quot; stojí přímo na meshcore.cz. Když to zapomeneš, fungovat to bude, ale tvoje zprávy budou v menšině a u některých starších repeaterů by mohly zmizet úplně.</p>
<p>Takhle prozaicky se v praxi řeší škálování decentralizované sítě. Žádný governance token, žádné hlasování přes blockchain. Telegramová skupina, hlasování na Facebooku, postupný rollout.</p>
<h2>Tři role, tři firmwary</h2>
<p>Na rozdíl od Meshtasticu, kde přeposílá víceméně každý uzel, MeshCore strukturu sítě rozdělil na tři role. To je hlavní rozdíl mezi oběma sítěmi a důvod, proč se v reálném provozu chovají úplně jinak.</p>
<p><strong>Companion</strong> je uzel, který si dáš do kapsy nebo na stůl. Přes Bluetooth (případně USB nebo WiFi, podle toho, jaký firmware nahraješ) ho spojíš s mobilem a posíláš a přijímáš zprávy. Provoz ostatních uživatelů nepřeposílá – pokud zpráva není určená tobě, companion ji ignoruje. Tím šetří éter i baterii.</p>
<p><strong>Repeater</strong> je naopak součást infrastruktury, ne relé navíc. Jeho jediným úkolem je předávat pakety smysluplným směrem. Bez Bluetooth, bez displeje, často bez krytu kromě 3D tištěné krabičky. Patří na střechu, komín, vysílač nebo kopec. Solární panel, 18650 nebo LiFePO4 baterie, anténa s rozumným výhledem. Operátor si ho nakonfiguruje přes web config tool ještě před tím, než ho někam pověsí, protože jakmile je nahoře, není kam strčit USB-C.</p>
<p><strong>Room Server</strong> je třetí typ. Něco jako lokální BBS pro region – uzel, který umí ukládat zprávy, sdružovat uživatele do tematických kanálů a fungovat jako store-and-forward, když je adresát zrovna mimo dosah sítě.</p>
<p>Role nejde přepnout konfigurací. Když chceš ze svého companionu udělat repeater, musíš ho znovu flashnout. To zní jako omezení, ale dává smysl: firmware pro každou roli je jinak optimalizovaný a komunita má jistotu, že když má někdo v síti repeater, je to opravdu repeater, a ne mobil, kterému zrovna umřela baterka.</p>
<h2>Hardware: co reálně koupit v polovině roku 2026</h2>
<p>Tabulka, kterou bych si přál mít, když jsem s MeshCore začínal.</p>
<table>
<thead>
<tr>
<th>Typ uzlu</th>
<th>Doporučená deska</th>
<th>Orientační cena</th>
<th>K čemu</th>
</tr>
</thead>
<tbody>
<tr>
<td>Levný companion</td>
<td>Heltec V3 (ESP32)</td>
<td>600–900 Kč</td>
<td>Vstupní úroveň, OLED, BLE, integrovaná nabíječka</td>
</tr>
<tr>
<td>Lepší companion</td>
<td>Heltec V4 / V4.3</td>
<td>900–1200 Kč</td>
<td>Nižší spotřeba, novější LoRa stack</td>
</tr>
<tr>
<td>Kapesní companion</td>
<td>SenseCAP T1000-E</td>
<td>~2500 Kč</td>
<td>Kompaktní, GPS, nRF52, OTA</td>
</tr>
<tr>
<td>E-ink companion</td>
<td>LilyGo T-Echo</td>
<td>~1800 Kč</td>
<td>Displej drží i bez napájení</td>
</tr>
<tr>
<td>Autonomní zařízení</td>
<td>LilyGo T-Deck</td>
<td>~3500 Kč</td>
<td>Vlastní klávesnice, displej, telefon nepotřebuješ</td>
</tr>
<tr>
<td>DIY repeater</td>
<td>Heltec V3/V4 + 18650 + panel</td>
<td>~1500 Kč</td>
<td>Bastlířská varianta, krabička z tiskárny</td>
</tr>
<tr>
<td>Hotový solární repeater</td>
<td>SenseCAP Solar Node P1 Pro</td>
<td>~5000 Kč</td>
<td>Plug and play pro střechu</td>
</tr>
</tbody>
</table>
<p>K hardwaru pár poznámek z praxe, protože tabulka neřekne všechno.</p>
<p>Heltec V3 je pořád nejrozšířenější deska v české síti. Funguje, je levný, návodů na něj je plný Telegram. Pokud začínáš a nechceš řešit detaily, vezmi Heltec V3 nebo V4 v EU variantě (868 MHz, <strong>ne</strong> 915 MHz – ten je pro USA a v české síti nezachytí nic).</p>
<p>T-Deck je jiná liga. Pro lidi, co chtějí mít komunikaci úplně mimo telefon – na hory, do auta na dlouhé tahy, nebo prostě jako koncept „vlastní pager bez internetu&quot;. Pořád stojí kolem 3500 Kč, ale když k tomu přidáš baterii a pořádnou anténu, cena se snadno přehoupne přes pět litrů.</p>
<p>A SenseCAP Solar Node P1 Pro je teď v české komunitě nejcitovanější volba pro hotový repeater. Eischmann o něm píše: „Úplně se mi nechtělo bastlit vlastní řešení, takže jsem zvolil ověřené hotové řešení SenseCAP Solar Node P1 Pro.&quot; Pět tisíc je dost peněz na to, aby ses k nákupu rozhoupal, ale když jde o střechu rodinného domu, kde má mít spojení tvůj soused i ty, je to investice, která se vrátí.</p>
<h3>BOM pro vlastní solární repeater (DIY varianta, ~1700 Kč)</h3>
<p>Pro úplnost, kdyby ti to nedalo a chtěl bys ho postavit.</p>
<p>Zhruba takhle vypadá rozumný DIY repeater postavený na Heltecu, který přežije i bez sítě:</p>
<ul>
<li>Heltec V3 (EU 868 MHz) – 750 Kč</li>
<li>LiFePO4 článek 18650, 1500 mAh – 250 Kč (pozor na firmware ≥ 1.12, kde byly s LFP/LTO články hlášené <a href="https://meshcore.cz/">problémy s napěťovou křivkou</a>)</li>
<li>TP4056 modul s ochranou – 30 Kč</li>
<li>6V/5W solární panel – 200 Kč (zimní slunce v ČR je nízké a krátké, dimenzuj radši s rezervou)</li>
<li>LoRa anténa 868 MHz, zisk 3–5 dBi – 200 Kč</li>
<li>Pigtail SMA / IPEX – 60 Kč</li>
<li>3D tištěná krabička – pár desítek korun za filament</li>
<li>IP65 průchodka pro anténní kabel – 80 Kč</li>
<li>Spojovací materiál, dlaždice, držák – podle situace</li>
</ul>
<p>Cena pohodlně pod dva tisíce, pokud máš tiskárnu doma. Když kupuješ všechno nové a tiskneš v servisu, přidej k tomu pár stovek za filament a držák antény.</p>
<h2>Frekvence a nastavení regionu pro ČR</h2>
<p>Tohle bývá první past pro lidi, co začínají. MeshCore v Evropě obecně jede na pásmu 868 MHz, ale česká komunita se sjednotila na konkrétním presetu, který se ne vždycky shoduje s výchozím nastavením „EU&quot; v aplikaci. Konkrétně: frekvence 869,432 MHz, šířka pásma 62,5 kHz, spreading factor 7, coding rate 5, vysílací výkon 22 dBm.</p>
<p>Co to znamená v praxi: vysíláš na bezlicenčním pásmu, žádné poplatky, žádná registrace. Ale <strong>musíš respektovat duty cycle limit 1 %</strong> – tedy ze sta sekund vysílat nejvýš jednu. Firmware to hlídá sám, ale když si pustíš na síti bota, který každé tři minuty odešle status update, ten limit ti tiše vyžere a tvoje skutečné zprávy se přes něj nedostanou.</p>
<p>A teď k tomu botovi.</p>
<h2>Etiketa: žádné automaty, žádné scrapery</h2>
<p>Česká MeshCore komunita má jedno pravidlo, které visí přímo na úvodní stránce meshcore.cz a v každém druhém příspěvku na Telegramu. „Síť budujeme striktně pro komunikaci mezi lidmi (keyboard to keyboard). Vyvarujte se automatizovanému posílání zpráv, vyčítání repeaterů nebo jiné komunikaci, která není mezi lidmi!&quot;</p>
<p>Důvod je matematický. LoRa síť má reálnou propustnost zhruba tří kilobitů za sekundu. To není opomenutí, to je fyzika daná modulací. Komunita po hlasování konstatovala, že 75 % generovaného provozu tvořili boti, což snižuje pravděpodobnost doručení skutečných zpráv. Vznikla z toho samostatná kampaň: provozovatelé botů se mají vypnout. Jediný, kdo tam má povolení zůstat, je El Pong – komunitní bot s AI a emailem, který si komunita schválně nechala jako experiment.</p>
<p>Když si tedy zapneš svůj první uzel a napadne tě napsat skript, který bude každou hodinu pingovat dosah, prostě to nedělej. Není to vůči nikomu fér.</p>
<p>Totéž platí pro scrapery a „monitory pokrytí&quot;. Existuje <a href="https://meshcore.cz/">veřejná mapa</a> i analyzer, oba běží na backendu, kde tu zátěž nese server, ne LoRa éter. Když si chceš zmapovat vlastní dosah, projdi se s companionem a koukej do aplikace. Žádný autopilot.</p>
<h2>Krok za krokem: od krabičky k první zprávě</h2>
<p>Předpokládejme Heltec V3 v EU 868 MHz verzi, Android telefon a Chrome v notebooku.</p>
<p>Připoj desku přes USB-C k počítači. Pozor na kabel – některé „nabíjecí&quot; mají jen napájení a žádná data, a flasher se ti k čipu nedostane. Když to nepřipojí, zkus jiný kabel dřív, než začneš googlovat ovladače.</p>
<p>Otevři <a href="https://flasher.meshcore.co.uk">flasher.meshcore.co.uk</a> v Chromu (nebo jiném prohlížeči postaveném na Chromiu – Edge funguje, Firefox bohužel ne, protože nemá Web Serial API). Po načtení vyber model desky. Pro Heltec V3 zvol <em>Community Firmware</em> a roli <em>Companion Bluetooth</em>. Stiskni <em>Flash</em>. Asi po půl minutě má deska firmware.</p>
<p>Stáhni si aplikaci <strong>MeshCore</strong> – existuje pro <a href="https://play.google.com/store/apps/details?id=co.meshcore.app">Android</a> i iOS. Po spuštění klepni na „přidat zařízení&quot; a aplikace najde tvůj uzel přes Bluetooth. Spárování chce PIN, který se ti zobrazí na OLED displeji.</p>
<p>První věc, kterou pak v aplikaci uděláš (ano, ještě před tím, než pošleš první zprávu): otevři <em>Experimental Settings</em> a přepni <em>Default Path Hash Size</em> na <strong>2 bytes</strong>. To je ta kampaň, o které jsem psal výš. Pak nastav region – pro Česko buď použij preset <em>EU Recommended</em>, nebo manuálně nastav 869,432 MHz / BW 62,5 kHz / SF 7 / CR 5.</p>
<p>Teď klepni v aplikaci na ikonu vlny (advert) a pošli <em>Flood Routed Advert</em>. To je signál „jsem tady, kdo mě slyší&quot;. V <em>Contacts</em> by se ti během následujících sekund až minut měly začít objevovat repeatery a uživatelé v dosahu. Když ne, vystup na balkon nebo zkus jít k oknu. LoRa není WiFi a na úrovni ulice mezi paneláky se jí obvykle moc nedaří.</p>
<p>Pošli testovací zprávu do kanálu <strong>#test</strong>. Pokud uvidíš v aplikaci „Heard X repeat(s)&quot;, jsi v síti. Hotovo.</p>
<h2>Linuxový klient Meshy: alternativa pro lidi, co nechtějí mobil</h2>
<p>Pokud jsi typ člověka, co radši pracuje na notebooku než na mobilu, je tu pro tebe Meshy. Linuxový klient pro MeshCore, který od února 2026 píše Jiří Eischmann. Aplikace má dokonce funkce, které oficiální klient zatím nemá – třeba vykreslení trasy poslední úspěšné zprávy přímo na mapě v chatu.</p>
<p>Meshy se aktuálně distribuuje přes Flatpak repozitář a každý commit do gitu spouští nový build pro x86_64 i aarch64 (díky Roští.cz za poskytnutí builderu). Eischmann teď cílí na publikaci ve Flathubu – hlavní překážka prý je, že kvůli udev pravidlu pro připojení companionu přes USB potřebuje obejít sandbox pomocí <code>flatpak spawn</code>. Časem to vyřeší. Komunita kolem linuxového klienta roste a Meshy je teď nejstabilnější varianta, pokud chceš MeshCore používat z laptopu.</p>
<p>Pro lidi z radioamatérské scény, kteří už znají RTL-SDR, gpredict a další unixové utility, je Meshy přirozenější než přepínání mezi mobilem a notebookem. V brněnské komunitě je to čím dál jasnější volba.</p>
<h2>Brno jako centrum české MeshCore scény</h2>
<p>Když si zmapuješ aktivitu české komunity, jihomoravský trojúhelník vyčnívá. Většina nejaktivnějších provozovatelů sítě sedí v Brně. Jindřich Skácel měl v únoru 2026 přednášku na 216. srazu spolku OpenAlt na FIT VUT, ukazoval klientská zařízení a praktické nasazení repeateru, video je <a href="https://vhsky.cz/w/eTwu4pMadf6uKUH75AbymD">na vhsky.cz</a>. Na budově Red Hatu v Medlánkách přímo běží repeater techpark.meshcore.cz, který kryje větší část severu Brna.</p>
<p>Není to náhoda. Brno má kombinaci, která MeshCore přeje: hustá technická komunita (Red Hat, FIT VUT, SUSE, NIC.CZ), aktivní open-source scéna kolem OpenAltu, prolínání ham a maker komunity a topologie s viditelností na okolní kopce (Babí lom, Děvín, Hostýn).</p>
<p>Eischmann to v jednom blogu trefil přirovnáním ke CZFree.Netu z přelomu nultých let – komunita, která bere infrastrukturu do svých rukou, protože ji to baví, ne protože musí.</p>
<p>Pokud bydlíš v Brně nebo okolí a chceš se připojit, je to teď nejjednodušší. Telegramová skupina <strong>meshcore_cz</strong> má aktivní topic <em>Wiki</em> a <em>Repeatery</em>, srazy OpenAltu v Red Hat Labu na FIT VUT chodí pravidelně každý třetí pátek v měsíci (i když ne každý je o MeshCore) a v Brně máš největší šanci potkat lidi, kteří síť reálně staví.</p>
<p>Jiné regiony pochopitelně taky fungují. Praha má pokrytí, Hradec a Liberec mají své sysopy, jižní Čechy mají svou skupinku. Ale hustota brněnské sítě v polovině roku 2026 je v republice unikum a kdyby ses chtěl podívat, jak vypadá MeshCore, když má kritickou masu, stojí za to si sem na jeden pátek vyrazit a vidět to z první ruky.</p>
<h2>Co dál</h2>
<p>Když máš companion v kapse a fungující spojení do sítě, je to první krok. Logické pokračování je vlastní repeater. Pokud bydlíš výš nebo máš střechu, je to nejspíš něco, co tvoje okolí ocení. Eischmannovi přes zimu umřely baterky na repeateru ivanovice.meshcore.cz, který byl 300 metrů od něj, a najednou byl bez spojení. Jeho ponaučení: „když závisíte na repeaterech ostatních, měli byste mít spojení alespoň na dva. Nebo mít vlastní.&quot; Síť odolnou proti blackoutu nepostavíš tím, že čekáš na sysopa o tři ulice dál.</p>
<p>Před tím, než si pořídíš hardware na repeater, vygeneruj si přes <a href="https://meshcore.cz/">Key Generator</a> vlastní prefix klíče. V březnu 2026 už volné jednobajtové prefixy nebyly. Při 2-byte hashi je situace lepší, ale stejně si zkontroluj v analyzeru, jestli zrovna tvůj generovaný prefix neběží už ten den někomu přes ulici.</p>
<p>A pokud chceš jít dál než ke klasickým textovkám – existuje <a href="https://github.com/meshcore-dev/MeshCore/releases/tag/companion-v1.15.0">GROUP_DATA</a>, binární typ paketu, který firmware 1.15 přinesl pro pokročilejší aplikace. Telemetrie, řízení vzdálených zařízení, integrace s domácí automatizací. Část komunity tudy už šlape, v Brně víc, v ostatních městech méně.</p>
<p>Co MeshCore není a co se nestane: nikdy z toho nebude bezdrátový internet, nikdy nebude pohánět videohovory, nikdy nezvládne přenášet fotky v rozumném čase. To je v pořádku. Stačí, že umí to, co lidi v Karpatech, na chatě v Beskydech nebo v zatopeném Bohumíně skutečně potřebují: krátkou textovku, která projde, i když všechno ostatní leží.</p>
<p>A taková síť se buduje úplně stejně, jako se před třiceti lety budoval CZFree.Net. Po jednom uzlu, po jedné krabičce, po jedné neděli na střeše.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F16%2Fmeshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/16/meshcore-v-praxi-jak-v-cesku-postavit-vlastni-lora-uzel-a-nezapadnout/">MeshCore v praxi: jak v Česku postavit vlastní LoRa uzel a nezapadnout</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WireClaw: ESP32 jako AI agent, který vám neshodí topení, když spadne internet</title>
		<link>https://www.hardwired.dev/2026/05/12/wireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Tue, 12 May 2026 09:51:29 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[nats]]></category>
		<category><![CDATA[openrouter]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3062</guid>

					<description><![CDATA[<p>Představte si scénář: pošlete přes Telegram zprávu „dej mi vědět, když teplota čipu překročí 28 stupňů&#34;. Bot odpoví, že rozumí. &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/12/wireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet/">WireClaw: ESP32 jako AI agent, který vám neshodí topení, když spadne internet</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Představte si scénář: pošlete přes Telegram zprávu „dej mi vědět, když teplota čipu překročí 28 stupňů&quot;. Bot odpoví, že rozumí. Od té chvíle ESP32 hlídá teplotu sám. Bez cloudu, bez LLM volání, bez WiFi. Spadne vám internet? Hlídá dál. Restartujete ho? Po naběhnutí hlídá dál.</p>
<p>Tohle je WireClaw, open-source firmware od Maria Schallnera (na GitHubu <code>M64GitHub</code>), který vyšel poprvé veřejně 25. února 2026. Z hardware-first myšlení vznikla jedna z mála implementací AI agenta na MCU, která bere vážně otázku, co se stane, když AI selže. Tady si projdeme, jak to funguje, proč to vzniklo a kde to narazí.</p>
<h2>Dvě smyčky, jeden čip</h2>
<p>Klíčový designový trik: WireClaw na ESP32 logicky rozděluje práci na dvě nezávislé části.</p>
<p><strong>Rule loop</strong> běží neustále a nedotýká se sítě. Čte senzory, vyhodnocuje uložená pravidla, spouští akce. Žádný HTTP request, žádná LLM inference. Když teplota přeleze práh, rozsvítí se LED nebo přijde Telegram zpráva, to celé v řádu milisekund, lokálně.</p>
<p><strong>AI loop</strong> se probudí, jen když přijde zpráva přes Telegram, USB sériovku nebo NATS. Tehdy WireClaw udělá HTTPS na OpenRouter (nebo HTTP na lokální Ollamu), nechá LLM zformulovat odpověď a případně vytvořit nové pravidlo. Maximum je pět iterací s nástroji na jednu zprávu, pak se vše zabalí.</p>
<blockquote>
<p><em>„The AI creates the rules. The rules run without the AI.&quot;</em></p>
</blockquote>
<p>Tahle věta z dokumentace shrnuje celou filozofii. LLM se používá jako kompilátor lidského záměru do embedded logiky. Pravidlo, které vznikne, jde do flash paměti a od té chvíle žije svým životem. Reboot? Po načtení z flashe pokračuje, jako by se nic nestalo.</p>
<p>Pro někoho, kdo zkoušel postavit IoT s ChatGPT v hot loopu, je to úleva. Žádný API výpadek vám neshodí topení.</p>
<h2>Co se vejde do ESP32</h2>
<p>WireClaw potřebuje 4 MB flash a tři typy čipů: ESP32-C3, C6 nebo S3. Klasický ESP32 s Tensilica jádrem <strong>není</strong> podporován, kvůli OTA partition table requirementům. ESP8266 je mimo hru kvůli paměti.</p>
<p>Reálná spotřeba zdrojů podle oficiální dokumentace:</p>
<pre><code>RAM:   59,7 %  (196 KB z 320 KB)
Flash: 51,4 %  (1,3 MB z 2,5 MB)</code></pre>
<p>To je dost, ale ne na hraně. Zhruba 40 % RAM zbývá pro vaše vlastní rozšíření. Setup portal a webové GUI sedí v PROGMEM, takže RAM nežerou.</p>
<p>Doporučená volba je ESP32-C6 DevKit. Cena se v Číně pohybuje kolem 5–10 dolarů, RISC-V jádro je rychlé a WS2812B onboard LED rovnou slouží jako vestavěný actuator. ESP32-S3 dává smysl tam, kde plánujete složitější rule chains a chcete víc paměti.</p>
<h2>Pravidla v praxi</h2>
<p>Rule engine je dost expresivní. Pravidlo se skládá ze senzoru, podmínky (<code>gt</code>, <code>lt</code>, <code>eq</code> a další), prahu a akce. Vestavěných virtuálních senzorů je hned několik: <code>chip_temp</code> z interního čidla, <code>clock_hour</code>, <code>clock_minute</code> a chytrý <code>clock_hhmm</code>. Posledně jmenovaný kóduje čas jako <code>hodina × 100 + minuta</code>, takže 10:12 = 1012. Najednou jde plánovat přes prostou <code>eq</code> podmínku bez nutnosti řešit dvě pole zvlášť. Elegantní hack.</p>
<p>Akce zahrnují <code>led_set</code> (RGB LED), <code>gpio_write</code>, <code>telegram</code>, <code>nats_publish</code> a <code>serial_send</code>. V textových akcích funguje placeholder substituce: do zprávy můžete napsat <code>&quot;Teplota čipu: {chip_temp}°C&quot;</code> a engine to vyrenderuje z živých dat. Bez LLM, přímo v rule loopu.</p>
<p>Pokročilejší trik je rule chaining: jedno LLM volání může vytvořit multi-step sekvenci s non-blocking delays. Spustí se Telegram alert, po pěti sekundách se rozsvítí červená LED, po deseti se zhasne a publikuje se zpráva na NATS. Mezitím engine paralelně vyhodnocuje ostatní pravidla.</p>
<p>Co u všech těchto testovaných modelů funguje, a co ne, stojí za pozornost. Gemini 2.5 Flash zvládá chains excelentně za zhruba 4 sekundy. Claude Sonnet 4.5 taky, ale potřebuje 10 sekund. Qwen 2.5 7B selhává: chybějící kroky, špatné delays, někdy přímo syntax errors. Pokud vás zajímá cost/perf pro běžný hobby use, Gemini Flash přes OpenRouter je sweet spot.</p>
<h2>NATS jako páteř</h2>
<p>Tady WireClaw zachází dál než většina podobných projektů. NATS, lehký pub/sub broker, je integrovaný ve třech vrstvách.</p>
<p>První vrstva: <strong>virtuální senzory</strong>. Vytvoříte senzor typu <code>nats_value</code> se subscribe na subject, třeba <code>home.room.temp</code>. Cokoliv, co umí na NATS publishovat (Python skript, Home Assistant, jiný WireClaw, průmyslový PLC), najednou dodává data do rule enginu.</p>
<p>Druhá vrstva: <strong>tool-call protokol</strong>. Externí AI agent (nemusí to být OpenClaw, stačí jakýkoli NATS klient) může volat 19 dostupných nástrojů přímo na ESP32, bez nutnosti budit lokální LLM. Latence se podle landing page pohybuje kolem 30 milisekund. Číslo z marketingu, ale architekturou to dává smysl.</p>
<p>Třetí vrstva, <strong>HAL</strong> (Hardware Abstraction Layer), je nejnižší. Žádný LLM, žádný JSON. Pevně definované subjects typu <code>{device}.hal.gpio.5.set</code> s payloadem <code>&quot;1&quot;</code> a odpovědí <code>&quot;ok&quot;</code>. Pro programy v Pythonu nebo Go, které potřebují deterministickou latenci, je tohle správná vrstva. Tight loop přes ESP32 z notebooku, žádný overhead.</p>
<p>A pak je tu <code>remote_chat</code> — tool, kterým se jeden WireClaw může ptát druhého, jako by si chatovali. Edge AI mesh s federovaným reasoningem. Trochu sci-fi, ale funkční.</p>
<h2>Kde to narazí</h2>
<p>Žádný projekt není bez háčků a u WireClawa stojí za to vědět o pár věcech předem.</p>
<p>Tu hlavní jsem už zmínil: <strong>klasický ESP32 ne</strong>. Pokud máte zásobu starších DevKitů, smůla. Buď port, nebo nákup nových C3/C6/S3 boardů.</p>
<p>Bezpečnost. Setup portal je captive portal <strong>bez autentizace</strong>. Web GUI po setup taky bez autentizace. Kdokoli v LAN si může změnit system prompt (čili jailbreak agenta), upravit persistent memory nebo smazat pravidla. API key sedí na flashi v plaintextu. Pro lab a hobby OK, pro produkci to chce VLAN izolaci a u Telegram bota strict spending limit na OpenRouter účtu.</p>
<p>Conversation history je čtyřtahový kruhový buffer plus 512 bytů persistent memory. Agent si nepamatuje hlubší kontext, jen poslední pár výměn. Pro chat o teplotě dobré, pro komplexnější dialog málo.</p>
<p>A poslední věc: rule loop běží &quot;každou iterací loop()&quot;. Frekvence není v dokumentaci uvedená. Pro motorické řízení, audio nebo cokoli, kde záleží na sub-milisekundové determinističnosti, sáhněte po přímém low-level firmware. WireClaw je orchestrátor, ne real-time kontrolér.</p>
<h2>Komu to dává smysl</h2>
<p>WireClaw cílí na úzkou komunitu: bastlíře, kteří mají ESP32 v šuplíku a chtějí experimentovat s AI agenty bez nutnosti stavět cloudovou infrastrukturu. Pro lab automatizaci, kde Home Assistant je overkill, pro distribuovanou senzor mesh, pro vzdělávací demo.</p>
<p>Komunita je zatím malá. Patnáct hvězdiček, čtyři forky, žádné formální release. Záleží na jediném vývojáři. To se časem může změnit, ale dneska to ovlivňuje, jak hluboko se do toho pouštět.</p>
<p>Pokud máte ESP32-C6 v šuplíku a hodinu času, web flasher na <a href="https://wireclaw.io/flash.html">wireclaw.io/flash.html</a> udělá zbytek. Chrome nebo Edge kvůli WebSerial API, kabel, OpenRouter API key, a za pár minut si můžete přes Telegram říct prvnímu vlastnímu edge agentovi, co má sledovat.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F12%2Fwireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/12/wireclaw-esp32-jako-ai-agent-ktery-vam-neshodi-topeni-kdyz-spadne-internet/">WireClaw: ESP32 jako AI agent, který vám neshodí topení, když spadne internet</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MeshCore: Off-grid komunikaci prostřednictvím LoRa mesh sítí</title>
		<link>https://www.hardwired.dev/2025/07/20/meshcore-off-grid-komunikaci-prostrednictvim-lora-mesh-siti/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sun, 20 Jul 2025 12:55:55 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[HAM]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[Různé]]></category>
		<category><![CDATA[SDR]]></category>
		<category><![CDATA[868 MHz]]></category>
		<category><![CDATA[Andy Kirby]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[backup communication]]></category>
		<category><![CDATA[bateriové napájení]]></category>
		<category><![CDATA[battery powered]]></category>
		<category><![CDATA[BBS server]]></category>
		<category><![CDATA[bezdrátová komunikace]]></category>
		<category><![CDATA[ble]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[C++ library]]></category>
		<category><![CDATA[Česká republika]]></category>
		<category><![CDATA[chat aplikace]]></category>
		<category><![CDATA[chat application]]></category>
		<category><![CDATA[companion radio]]></category>
		<category><![CDATA[crisis communication]]></category>
		<category><![CDATA[Czech Republic]]></category>
		<category><![CDATA[decentralized network]]></category>
		<category><![CDATA[decentralizovaná síť]]></category>
		<category><![CDATA[digital signatures]]></category>
		<category><![CDATA[digitální podpisy]]></category>
		<category><![CDATA[disaster recovery]]></category>
		<category><![CDATA[Discord komunita]]></category>
		<category><![CDATA[dlouhý dosah]]></category>
		<category><![CDATA[embedded systems]]></category>
		<category><![CDATA[emergency communication]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[fixed routing]]></category>
		<category><![CDATA[flasher]]></category>
		<category><![CDATA[flood routing]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[Heltec]]></category>
		<category><![CDATA[hybrid routing]]></category>
		<category><![CDATA[infrastructure independent]]></category>
		<category><![CDATA[IoT network]]></category>
		<category><![CDATA[IoT síť]]></category>
		<category><![CDATA[Ještěd]]></category>
		<category><![CDATA[katastrofické scénáře]]></category>
		<category><![CDATA[Klínovec]]></category>
		<category><![CDATA[krizová komunikace]]></category>
		<category><![CDATA[long range]]></category>
		<category><![CDATA[LoRa mesh]]></category>
		<category><![CDATA[LoRa radio]]></category>
		<category><![CDATA[low power]]></category>
		<category><![CDATA[mesh networking]]></category>
		<category><![CDATA[mesh topology]]></category>
		<category><![CDATA[MeshCore]]></category>
		<category><![CDATA[meshcore.cz]]></category>
		<category><![CDATA[Meshtastic alternativa]]></category>
		<category><![CDATA[Meshtastic alternative]]></category>
		<category><![CDATA[MIT licence]]></category>
		<category><![CDATA[MIT license]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[mobilní aplikace]]></category>
		<category><![CDATA[multi-hop routing]]></category>
		<category><![CDATA[network technologies]]></category>
		<category><![CDATA[nezávislý na infrastruktuře]]></category>
		<category><![CDATA[nízká spotřeba]]></category>
		<category><![CDATA[nouzová komunikace]]></category>
		<category><![CDATA[off-grid communication]]></category>
		<category><![CDATA[off-grid komunikace]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[outdoor communication]]></category>
		<category><![CDATA[outdoor komunikace]]></category>
		<category><![CDATA[P2P komunikace]]></category>
		<category><![CDATA[packet radio]]></category>
		<category><![CDATA[paketové rádio]]></category>
		<category><![CDATA[path memory]]></category>
		<category><![CDATA[peer to peer]]></category>
		<category><![CDATA[platformio]]></category>
		<category><![CDATA[radioamatéři]]></category>
		<category><![CDATA[RAK Wireless]]></category>
		<category><![CDATA[repeater]]></category>
		<category><![CDATA[Říp]]></category>
		<category><![CDATA[room server]]></category>
		<category><![CDATA[samoléčící síť]]></category>
		<category><![CDATA[self-healing network]]></category>
		<category><![CDATA[šifrování]]></category>
		<category><![CDATA[síťová topologie]]></category>
		<category><![CDATA[síťové technologie]]></category>
		<category><![CDATA[solar powered]]></category>
		<category><![CDATA[solární napájení]]></category>
		<category><![CDATA[store and forward]]></category>
		<category><![CDATA[tactical radio]]></category>
		<category><![CDATA[taktické rádio]]></category>
		<category><![CDATA[tech blog]]></category>
		<category><![CDATA[technologický blog]]></category>
		<category><![CDATA[Telegram skupina]]></category>
		<category><![CDATA[telemetrie]]></category>
		<category><![CDATA[telemetry]]></category>
		<category><![CDATA[terminal chat]]></category>
		<category><![CDATA[USB komunikace]]></category>
		<category><![CDATA[vestavné systémy]]></category>
		<category><![CDATA[web aplikace]]></category>
		<category><![CDATA[web application]]></category>
		<category><![CDATA[wireless communication]]></category>
		<category><![CDATA[záložní komunikace]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2788</guid>

					<description><![CDATA[<p>MeshCore: Revoluce v off-grid komunikaci prostřednictvím LoRa mesh sítí Představte si situaci: bouře vyřadí mobilní věže, internet je nedostupný, klasické &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2025/07/20/meshcore-off-grid-komunikaci-prostrednictvim-lora-mesh-siti/">MeshCore: Off-grid komunikaci prostřednictvím LoRa mesh sítí</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h1>MeshCore: Revoluce v off-grid komunikaci prostřednictvím LoRa mesh sítí</h1>
<p>Představte si situaci: bouře vyřadí mobilní věže, internet je nedostupný, klasické komunikační kanály selhávají. Právě v takových chvílích oceníte technologie, které fungují nezávisle na centralizované infrastruktuře. A přesně to je oblast, kde se MeshCore etabluje jako game-changer.</p>
<p>V posledních letech jsme svědky dramatického růstu zájmu o decentralizované komunikační systémy. Ať už jde o přírodní katastrofy, výpadky infrastruktury, nebo jednoduše potřebu komunikace v odlehlých oblastech, tradiční řešení často selhávají právě tehdy, kdy je potřebujeme nejvíce. Zde vstupuje do hry mesh networking - technologie, která umožňuje zařízením komunikovat přímo mezi sebou, vytvářet samoléčící se sítě a poskytovat komunikační kanály tam, kde žádné neexistují.</p>
<p>MeshCore reprezentuje novou generaci této technologie. Zatímco jeho starší bratr Meshtastic si získal obrovskou popularitu a přinesl mesh networking do povědomí širší veřejnosti, zároveň odkryl některé fundamentální problémy škálovatelnosti. Právě tyto výzvy se MeshCore rozhodl řešit od základů - s čistším designem, efektivnějším routingem a architekturou pripravenou na budoucnost.</p>
<p><strong>Problém s přetížením sítí:</strong> Zatímco populární Meshtastic trpí problémy se zahlcováním sítě kvůli své architektuře, MeshCore přináší elegantní řešení těchto problémů od samého počátku.</p>
<h2>Co je MeshCore?</h2>
<p>MeshCore je multiplatformní systém umožňující bezpečnou textovou komunikaci využívající LoRa rádiový hardware. Jde o lightweight, open-source C++ knihovnu vytvořenou pro umožnění mesh networkingu přes LoRa a další packet-based rádia.</p>
<p>Hlavní charakteristiky MeshCore zahrnují:</p>
<p><strong>Multi-hop packet routing</strong> - zařízení mohou předávat zprávy přes více uzlů, rozšiřuje dosah nad rámec jednoho rádia. Systém podporuje konfigurovatelný počet hopů pro vyvážení efektivity sítě.</p>
<p><strong>Decentralizovaná architektura</strong> - nevyžaduje centrální server ani internet; síť je self-healing, což znamená, že pokud jeden uzel selže nebo se dostane mimo dosah, MeshCore najde alternativní cestu.</p>
<p><strong>Nízká spotřeba energie</strong> - ideální pro zařízení napájená z baterií nebo solárních panelů, což umožňuje dlouhodobé nasazení v odlehlých oblastech.</p>
<h2>Proč vznikl MeshCore?</h2>
<h3>Problémy Meshtastic</h3>
<p>Ačkoliv se Meshtastic stal velmi populárním (v České republice bylo registrováno přes 1110 zařízení), přinesl to i problémy:</p>
<p><strong>Zahlcení sítě:</strong> Radiokomunikační pásmo 868 MHz se rychle zahltilo kvůli architektuře, kdy se každá zpráva šíří z každého bodu na všechny dostupné body. Meshtastic ve skupině 10 zařízení funguje dobře, ale ve skupině stovek zařízení už zprávy často nedorazí nebo nedorazí potvrzení.</p>
<p><strong>Neefektivní provoz:</strong> Každá krabička se spojí s každou, což vytváří zbytečný síťový provoz a degraduje celkový výkon sítě.</p>
<p><strong>Problém s aktualizacemi:</strong> I když Meshtastic verze 2.6 slibuje vylepšení, musela by se nainstalovat na všechna existující zařízení - což u tisíců zařízení na stožárech a těžko přístupných místech představuje obrovský problém.</p>
<h2>Použití a aplikace</h2>
<p>MeshCore nachází uplatnění v široké škále scénářů:<br />
Může být použit pro off-grid komunikaci, emergency response &amp; disaster recovery, outdoor aktivity. Systém umožňuje zůstat v kontaktu i v odlehlých oblastech bez pokrytí mobilní sítě.</p>
<h3>Taktické a bezpečnostní aplikace</h3>
<p>Taktická bezpečnost včetně práva a pořádku a soukromé bezpečnosti - MeshCore poskytuje šifrovanou komunikaci pro profesionální použití.</p>
<h3>IoT a senzorové sítě</h3>
<p>Také IoT senzorové sítě - systém dokáže efektivně přenášet data ze vzdálených senzorů zpět do centrálního místa.</p>
<h2>Technické specifikace</h2>
<h3>Architektura a vývojové prostředí</h3>
<p>MeshCore je lightweight, portable C++ knihovna určená pro vývojáře, kteří chtějí vytvářet resilientní, decentralizované komunikační sítě bez internetu. Na rozdíl od Meshtastic, který je přizpůsoben pro casual LoRa komunikaci, nebo Reticulum s pokročilým networkingem, MeshCore balancuje jednoduchost se škálovatelností.</p>
<p><strong>Vývojové možnosti:</strong></p>
<ul>
<li><strong>Pro koncové uživatele</strong> - předkompilované firmware k přímému flashování</li>
<li><strong>Pro vývojáře</strong> - otevřená C++ knihovna pro custom embedded řešení</li>
<li><strong>MIT licence</strong> - volné použití pro osobní i komerční projekty</li>
</ul>
<h3>Podporovaná zařízení</h3>
<p>MeshCore podporuje širokou škálu LoRa hardware:</p>
<ul>
<li><strong>Heltec</strong> - V3 LoRa Boards, T114, V2</li>
<li><strong>RAK Wireless</strong> - RAK4631 (nejúspornější varianta)</li>
<li><strong>LilyGo</strong> - T3S3, TLora32 v1.6</li>
<li><strong>Xiaomi</strong> - XiaoS3 WIO (sx1262 combo), XiaoC3 (plus externí sx126x modul)</li>
<li><strong>Sensecap</strong> - T1000e</li>
<li><strong>Station G2</strong></li>
</ul>
<p>V České republice můžete zařízení zakoupit u specializovaných distributorů elektronických komponent jako je Pájeníčko.</p>
<h3>Protokol a routing</h3>
<p>MeshCore funguje jako mesh knihovna v jazyce C++ i jako hotový firmware, který stačí nahrát do podporovaného zařízení. Systém vytváří self-organizing mesh síť, kde každý uzel udržuje routing tabulku a může předávat pakety jménem ostatních uzlů.</p>
<p><strong>Klíčové funkce routingu:</strong></p>
<ul>
<li><strong>Flood a path memory</strong> - první soukromou zprávu posílá jako Flood, jakmile je zpráva doručena, zapamatuje si její cestu a pak ji posílá jen přes zapamatované uzly</li>
<li><strong>Fixed path routing</strong> - možnost ručně nastavit cesty pro zprávy, což vede ke spolehlivějšímu doručení ve složitějších topologiích</li>
<li><strong>Automatické routing</strong> - pokud doručení selže, posílá se znovu Flood</li>
<li><strong>Multi-hop routování</strong> - zprávy mohou cestovat přes více uzlů</li>
<li><strong>Rozlišení rolí</strong> - klient nebo router jsou oddělené role, routery jen přeposílají packety bez zbytečných funkcí</li>
</ul>
<h2>MeshCore vs. konkurence</h2>
<h3>Porovnání s Meshtastic</h3>
<p>Zatímco Meshtastic je nejpopulárnějším off-grid messaging řešením, MeshCore nabízí několik klíčových výhod a nevýhod:</p>
<p><strong>Výhody MeshCore:</strong></p>
<ul>
<li><strong>Vyšší flexibilita</strong> - díky otevřené knihovně mohou vývojáři tvořit specifická síťová řešení</li>
<li><strong>Vylepšené routování</strong> - možnost ručně nastavit cesty nebo využít efektivnější fixed path routing</li>
<li><strong>Méně zahlcení sítě</strong> - menší objem status provozu, výhodné v rozsáhlých sítích</li>
<li><strong>MIT licence</strong> - umožňuje použití i v komerčních projektech</li>
<li><strong>Strukturovanější přístup</strong> s pokročilými síťovými funkcemi jako static path optimalizace</li>
<li><strong>Oddělené role</strong> - routery jsou jen routery, klienti jen klienti</li>
<li><strong>Store-and-forward messaging</strong> - ukládání zpráv pro offline příjemce (mailbox funkce)</li>
<li><strong>Čistě mesh komunikace</strong> - žádné internetové propojení, funguje i bez elektriky jen se solárním napájením</li>
</ul>
<p><strong>Nevýhody MeshCore:</strong></p>
<ul>
<li><strong>Menší komunita</strong> - méně uživatelské podpory a návodů (ale rychle rostoucí)</li>
<li><strong>Statické role</strong> - nelze dynamicky měnit role uzlů bez reflashe firmware</li>
<li><strong>Menší podpora hardware</strong> - zatím podporuje méně zařízení než Meshtastic</li>
<li><strong>Chybí MQTT integrace</strong> - zaměřuje se čistě na mesh komunikaci bez internetového rozhraní</li>
<li><strong>Nekompatibilita</strong> - sdílí stejné frekvenční pásmo s Meshtastic, ale nejsou navzájem kompatibilní</li>
</ul>
<h3>Referenční aplikace</h3>
<p>MeshCore nabízí několik předkompilovaných firmware typů:</p>
<p><strong>Companion Radio</strong> - pro použití s externí chat aplikací přes BLE, USB nebo WiFi s podporou pro:</p>
<ul>
<li><strong>Web aplikace</strong> - app.meshcore.nz</li>
<li><strong>Android aplikace</strong> - dostupná v Google Play Store</li>
<li><strong>iOS aplikace</strong> - dostupná v App Store</li>
<li><strong>NodeJS a Python</strong> - pro vývojáře a automatizaci</li>
</ul>
<p><strong>Simple Repeater</strong> - rozšiřuje pokrytí sítě předáváním zpráv, konfigurovatelný přes web config tool nebo mobilní aplikaci</p>
<p><strong>Simple Room Server</strong> - jednoduchý BBS server pro sdílené příspěvky a store-and-forward messaging</p>
<p><strong>Simple Secure Chat</strong> - bezpečná terminálová textová komunikace přímo mezi zařízeními</p>
<h2>Boom MeshCore v České republice</h2>
<p>Červenec 2025 se stal přelomovým měsícem pro MeshCore v České republice. <strong>20. července 2025 se Ještěd přepnul na MeshCore</strong>, což spustilo lavinu dalších nasazení.</p>
<h3>Rychlý růst sítě</h3>
<p>Následovalo nasazení MeshCore na klíčových místech:</p>
<ul>
<li><strong>Říp</strong> - strategické místo pro severní Čechy</li>
<li><strong>Klínovec</strong> - nejvyšší hora Krušných hor</li>
<li><strong>Další menší vysílače</strong> po celé republice</li>
</ul>
<p>Za pouhý týden se pokrytí dramaticky zlepšilo a aktivita ukazuje, že trend pokračuje.</p>
<h3>Česká komunita</h3>
<p>Vznikl specializovaný komunitní web <strong>meshcore.cz</strong> s návody, tipy a triky. Telegram skupina <strong>meshcore_cz</strong> rychle roste a sdružuje nadšence po celé republice.</p>
<p><strong>Klíčové výhody oproti Meshtastic v ČR:</strong></p>
<ul>
<li><strong>Funkčnost</strong> - na rozdíl od přetížené Meshtastic sítě MeshCore skutečně funguje</li>
<li><strong>Méně telemetrie</strong> - síť není zahlcená zbytečnými daty</li>
<li><strong>Čistě offline</strong> - žádné internetové propojení, skutečná nezávislost</li>
<li><strong>Solární napájení</strong> - funguje i bez elektrické sítě, jen se slunečním svitem</li>
</ul>
<h3>Doporučené nastavení pro ČR</h3>
<p>Česká komunita se domluvila na těchto parametrech:</p>
<ul>
<li><strong>Frekvence:</strong> 869.525 MHz</li>
<li><strong>Bandwidth:</strong> 62.5 kHz  </li>
<li><strong>Spreading Factor:</strong> 7</li>
<li><strong>Coding Rate:</strong> 5</li>
<li><strong>Transmit Power:</strong> 22</li>
</ul>
<h3>Praktické nasazení v ČR</h3>
<ol>
<li><strong>Získání hardware</strong> - doporučujeme Heltec LoRa v3.1, dostupný u specializovaných distributorů jako je Pájeníčko</li>
<li><strong>Flashování firmware</strong> - využijte webový flasher na <a href="https://flasher.meshcore.co.uk/">https://flasher.meshcore.co.uk/</a>
<ul>
<li>Vyberte podporované zařízení</li>
<li>Zvolte typ firmware (Companion, Repeater, Room Server)</li>
<li>Klikněte FLASH</li>
</ul>
</li>
<li><strong>Připojení klientů:</strong>
<ul>
<li><strong>Web aplikace</strong> - app.meshcore.nz (funguje offline)</li>
<li><strong>Mobilní aplikace</strong> - Android/iOS z oficiálních obchodů</li>
<li><strong>Bluetooth pairing</strong> - PIN zobrazený na OLED displeji zařízení</li>
</ul>
</li>
<li><strong>Kontrola pokrytí</strong> - mapa uzlů dostupná na <a href="https://map.meshcore.dev/">https://map.meshcore.dev/</a></li>
</ol>
<p><strong>Důležité upozornění:</strong> Žádné zařízení s konektorem pro externí anténu nesmí být spuštěno bez připojené antény - hrozí zničení vysílací části čipu.</p>
<h3>Zdroje pro českou komunitu</h3>
<ul>
<li><strong>Oficiální web:</strong> <a href="https://meshcore.co.uk/">https://meshcore.co.uk/</a></li>
<li><strong>Česká stránka:</strong> <a href="https://meshcore.cz/">https://meshcore.cz/</a></li>
<li><strong>GitHub repository:</strong> <a href="https://github.com/ripplebiz/MeshCore">https://github.com/ripplebiz/MeshCore</a></li>
<li><strong>Webový flasher:</strong> <a href="https://flasher.meshcore.co.uk/">https://flasher.meshcore.co.uk/</a></li>
<li><strong>Web aplikace:</strong> <a href="https://app.meshcore.nz">https://app.meshcore.nz</a></li>
<li><strong>Telegram skupina:</strong> @meshcore_cz</li>
<li><strong>Discord komunita:</strong> Andy Kirby's Discord pro podporu vývojářů</li>
<li><strong>Mapa uzlů:</strong> <a href="https://map.meshcore.dev/">https://map.meshcore.dev/</a></li>
<li><strong>FAQ a dokumentace:</strong> GitHub wiki s detailními návody</li>
</ul>
<h3>Vzdělávací videa a tutoriály</h3>
<p><strong>Andy Kirby YouTube kanál</strong> - klíčový zdroj pro pochopení MeshCore:</p>
<ul>
<li><strong>MeshCore Intro Video</strong> - základní úvod do systému pro začátečníky</li>
<li><strong>Messaging System Tutorial</strong> - návod na používání komunikačního systému</li>
<li><strong>MeshCore Update série</strong> - pravidelné aktualizace o vývoji projektu</li>
<li><strong>Praktické testování</strong> - reálné testy dosahu a funkčnosti v terénu</li>
</ul>
<p>Andy Kirby byl instrumental v getting projects known out there a pro helping educate people s jeho videi. Jeho videa poskytují praktické návody od základního nastavení až po pokročilé konfigurace repeaterů.</p>
<p><strong>Doporučené sledování:</strong> Začněte s Intro Video, poté pokračujte tutoriály pro messaging systém a sledujte nejnovější update videa pro informace o vývoji.</p>
<h3>Vývojářské možnosti</h3>
<p>Pro pokročilé uživatele a vývojáře:</p>
<ul>
<li><strong>PlatformIO a Visual Studio Code</strong> - kompletní vývojové prostředí</li>
<li><strong>Open-source</strong> - MIT licence umožňuje modifikace a komerční použití</li>
<li><strong>Příspěvky do projektu</strong> - PR požadavky přes 'dev' branch na GitHubu</li>
<li><strong>Bug reporting</strong> - GitHub Issues pro hlášení chyb a feature požadavky</li>
</ul>
<h2>Závěr</h2>
<p>MeshCore představuje významný krok vpřed v oblasti decentralizované komunikace a v České republice už není jen teoretickou možností - <strong>je tu a funguje</strong>. Červencový boom ukázal, že česká komunita je připravena na alternativu k přetíženému Meshtastic.</p>
<p>Zatímco Meshtastic bojuje s problémy škálovatelnosti a čeká na nasazení verze 2.6 na tisíce existujících zařízení, MeshCore nabízí řešení těchto problémů od počátku. Jeho open-source povaha, nízké požadavky na energii, pokročilé mesh routing schopnosti a především <strong>funkčnost v reálném provozu</strong> z něj činí atraktivní volbu pro každého, kdo hledá spolehlivé off-grid komunikační řešení.</p>
<p>S rostoucím pokrytím a aktivní komunitou je MeshCore v České republice připraven stát se dominantní platformou pro decentralizovanou komunikaci. Jak říkají nadšenci: <strong>&quot;Meshtastic je mrtev, ať žije MeshCore!&quot;</strong></p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2025%2F07%2F20%2Fmeshcore-off-grid-komunikaci-prostrednictvim-lora-mesh-siti%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2025/07/20/meshcore-off-grid-komunikaci-prostrednictvim-lora-mesh-siti/">MeshCore: Off-grid komunikaci prostřednictvím LoRa mesh sítí</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ESP32 neobsahuje backdoor</title>
		<link>https://www.hardwired.dev/2025/03/10/esp32-neobsahuje-backdoor/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Mon, 10 Mar 2025 09:15:53 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[Raspberry]]></category>
		<category><![CDATA[Různé]]></category>
		<category><![CDATA[backdoor]]></category>
		<category><![CDATA[bezdrátová komunikace]]></category>
		<category><![CDATA[bezpečnost]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[elektronika]]></category>
		<category><![CDATA[embedded systémy]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[espressif]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[harvardská architektura]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[kyberbezpečnost]]></category>
		<category><![CDATA[mikrokontrolér]]></category>
		<category><![CDATA[Rootcon]]></category>
		<category><![CDATA[smart home]]></category>
		<category><![CDATA[soc]]></category>
		<category><![CDATA[Tarlogic]]></category>
		<category><![CDATA[Wi-Fi]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2672</guid>

					<description><![CDATA[<p>ESP32: Backdooru v populárním čipu Úvod V posledních dnech se odbornou i laickou veřejností šířily znepokojivé zprávy o možném backdooru &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2025/03/10/esp32-neobsahuje-backdoor/">ESP32 neobsahuje backdoor</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h1>ESP32: Backdooru v populárním čipu</h1>
<h2>Úvod</h2>
<p>V posledních dnech se odbornou i laickou veřejností šířily znepokojivé zprávy o možném backdooru v čipu ESP32 od čínské společnosti Espressif. Vzhledem k tomu, že těchto čipů bylo celosvětově distribuováno přibližně miliarda kusů a nacházejí se v širokém spektru IoT zařízení, vyvolala tato informace značné obavy. Následující analýza objasňuje, co se skutečně zjistilo a proč se nejedná o závažné bezpečnostní riziko.</p>
<h2>Co je ESP32?</h2>
<p>ESP32 představuje tzv. &quot;system on chip&quot; (SoC) - kompletní mikrokontrolér integrovaný v jediném čipu o rozměrech přibližně 8×8 mm. Při maloobchodní ceně kolem 50 Kč nabízí mimořádný výkon a funkcionalitu:</p>
<ul>
<li>Velké množství vstupně-výstupních (GPIO) pinů pro připojení senzorů a ovládacích prvků</li>
<li>Integrovanou podporu Wi-Fi a Bluetooth pro snadné připojení do sítě</li>
<li>Podporu komunikačních standardů jako SPI, I2C, CAN-BUS a další</li>
<li>Vynikající dokumentaci a vývojářskou podporu</li>
<li>Příznivý poměr cena/výkon</li>
</ul>
<p>Díky těmto vlastnostem se ESP32 stal dominantním čipem v oblasti IoT zařízení, chytrých domácností a řady dalších aplikací. Jeho hlavními konkurenty jsou některé čipy od Texas Instruments a pravděpodobně Raspberry Pi Pico 2TV.</p>
<h2>Co bylo skutečně objeveno?</h2>
<p>Na konferenci Rootcon konané 6.-8. března v Madridu prezentovali dva španělští výzkumníci objev nedokumentovaných příkazů v čipu <a href="https://www.hardwired.dev/2024/10/13/zakladni-prehled-espcek/" title="ESP32">ESP32</a>. Tyto příkazy umožňují provádět některé nízkoúrovňové operace jako zápis do paměti nebo odesílání specifických Bluetooth paketů.</p>
<p><a href="https://www.hardwired.dev/wp-content/uploads/2025/03/diagram.webp"><img fetchpriority="high" decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/03/diagram.webp" alt="" width="751" height="534" class="aligncenter size-full wp-image-2679" srcset="https://www.hardwired.dev/wp-content/uploads/2025/03/diagram.webp 751w, https://www.hardwired.dev/wp-content/uploads/2025/03/diagram-300x213.webp 300w" sizes="(max-width: 751px) 100vw, 751px" /></a></p>
<p>Je důležité zdůraznit, že existence nedokumentovaných příkazů je v hardwarových i softwarových řešeních běžná. Většina komplexnějších systémů obsahuje interní pomocné rutiny a metody, které nejsou určeny pro koncové uživatele, ale slouží k vnitřnímu fungování systému, ladění a podobným účelům.</p>
<h2>Proč se nejedná o bezpečnostní riziko?</h2>
<p>Klíčovým faktem je, že k využití těchto nedokumentovaných příkazů musí mít útočník již plnou kontrolu nad zařízením. To znamená:</p>
<ol>
<li>
<p><strong>Fyzický přístup k zařízení</strong> - Pro nahrání vlastního kódu do ESP32 je často nutné zařízení fyzicky rozebrat a připojit se k UART pinům na základní desce.</p>
</li>
<li>
<p><strong>Překonání bezpečnostních mechanismů</strong> - ESP32 umožňuje implementaci kontroly digitálního podpisu firmware, kdy čip odmítne spustit kód, který není podepsán správným klíčem.</p>
</li>
<li>
<p><strong>Harvardská architektura jako ochrana</strong> - Na rozdíl od běžných počítačů s von Neumannovou architekturou používá ESP32 harvardskou architekturu s oddělenou pamětí pro kód a data, což znesnadňuje spuštění škodlivého kódu.</p>
</li>
</ol>
<h2>Jak došlo k nedorozumění?</h2>
<p><a href="http://https://www.tarlogic.com/news/hidden-feature-esp32-chip-infect-ot-devices/" title="Společnost Tarlogic">Společnost Tarlogic</a>, mateřská organizace zmíněných výzkumníků, vydala původně bombastickou tiskovou zprávu hovořící o &quot;ohrožení stovek milionů IoT zařízení&quot;. Tuto zprávu převzal server Bleeping Computer, který v titulku navýšil počet potenciálně ohrožených zařízení na miliardy. Následně se informace lavinovitě šířila dalšími médii.</p>
<p>Po bližším prozkoumání problematiky byly původní články staženy a přeformulovány, aby lépe odrážely skutečnou závažnost situace. Nicméně, původní senzační zprávy už stihly vyvolat značné obavy.</p>
<p><a href="https://www.tarlogic.com/news/hidden-feature-esp32-chip-infect-ot-devices/" title="https://www.tarlogic.com/news/hidden-feature-esp32-chip-infect-ot-devices/">https://www.tarlogic.com/news/hidden-feature-esp32-chip-infect-ot-devices/</a><br />
<a href="https://www.bleepingcomputer.com/news/security/undocumented-commands-found-in-bluetooth-chip-used-by-a-billion-devices/" title="https://www.bleepingcomputer.com/news/security/undocumented-commands-found-in-bluetooth-chip-used-by-a-billion-devices/">https://www.bleepingcomputer.com/news/security/undocumented-commands-found-in-bluetooth-chip-used-by-a-billion-devices/</a></p>
<h2>Závěr</h2>
<p>Používání čipu ESP32 je nadále bezpečné. Přítomnost nedokumentovaných příkazů nepředstavuje sama o sobě bezpečnostní riziko, protože k jejich využití je nutná plná kontrola nad zařízením, což by útočníkovi umožnilo i mnohem závažnější zásahy do systému bez ohledu na existenci těchto příkazů.</p>
<p>Bezpečnost zařízení s ESP32 závisí primárně na kvalitě jejich návrhu:</p>
<ul>
<li>Zařízení, která byla navržena s důrazem na bezpečnost, zůstávají bezpečná i nadále</li>
<li>Zařízení s bezpečnostními nedostatky byla zranitelná již před tímto objevem</li>
</ul>
<p>Uživatelé zařízení s ESP32 mohou tedy pokračovat v jejich používání bez obav a vývojáři mohou nadále implementovat tento čip do svých konstrukcí.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2025%2F03%2F10%2Fesp32-neobsahuje-backdoor%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2025/03/10/esp32-neobsahuje-backdoor/">ESP32 neobsahuje backdoor</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Základní přehled ESPček</title>
		<link>https://www.hardwired.dev/2024/10/13/zakladni-prehled-espcek/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Sat, 12 Oct 2024 22:51:00 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[ch340g]]></category>
		<category><![CDATA[cp2102]]></category>
		<category><![CDATA[devkit]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[esp8266]]></category>
		<category><![CDATA[soc]]></category>
		<category><![CDATA[wemos]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2390</guid>

					<description><![CDATA[<p>Základní přehled ESPček, už tak v tom může být docela guláš. Varianty SoC System on a Chip integráče pro velkovezíry &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2024/10/13/zakladni-prehled-espcek/">Základní přehled ESPček</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Základní přehled ESPček, už tak v tom může být docela guláš.</p>
<h1>Varianty</h1>
<h3><a href="https://www.espressif.com/en/products/socs">SoC</a></h3>
<ul>
<li>System on a Chip</li>
<li>integráče</li>
<li>pro velkovezíry <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
</ul>
<h3><a href="https://www.espressif.com/en/products/modules">Moduly</a></h3>
<ul>
<li>Připravené <a href="https://en.wikipedia.org/wiki/System_on_a_chip">SoC</a> v modulu</li>
<li>stíněné</li>
<li>certifikace <a href="http://cs.btf-lab.com/news/what-is-fcc-certification/">FCC</a></li>
<li>pro výrobce a <a href="https://cestina20.cz/slovnik/hobik/">hobíky</a></li>
</ul>
<h3><a href="https://www.espressif.com/en/products/devkits">Dev Kity</a></h3>
<ul>
<li>vývojová deska s modulem nebo <a href="https://en.wikipedia.org/wiki/System_on_a_chip">SoC</a></li>
<li>vyvedený piny</li>
<li>konektory</li>
<li>a další <a href="https://cestina20.cz/slovnik/ficura/">fičury</a></li>
<li>pro vývojáře a <a href="https://cestina20.cz/slovnik/hobik/">hobíky</a></li>
</ul>
<h1>Převodníky USB na UART</h1>
<h2>CP2102</h2>
<ul>
<li><a href="https://www.silabs.com/">Silicon Labs</a></li>
<li>1Mbps</li>
<li>podpora Win, macOS, Linux</li>
</ul>
<h2>CH340G</h2>
<ul>
<li><a href="https://www.wch-ic.com/">WCH (Nanjing Qinheng Microelectronics)</a></li>
<li>2Mbps</li>
<li>může vyžadovat instalaci ovladačů</li>
</ul>
<h1>Modely</h1>
<h2>ESP8266</h2>
<ul>
<li>32-bit Single Core Xtensa LX106 80 - 160 MHz</li>
<li>2.4 GHz Wi-Fi</li>
<li><a href="https://en.wikipedia.org/wiki/Serial_Peripheral_Interface">SPI</a></li>
<li><a href="https://en.wikipedia.org/wiki/I%C2%B2C">I2C</a></li>
<li><a href="https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter">UART</a></li>
<li><a href="https://en.wikipedia.org/wiki/I%C2%B2S">I2S</a></li>
<li>RAM 160KB - 64KB instrukce, 96KB Data</li>
<li>externí <a href="https://www.prodigytechno.com/qspi-protocol">QSPI</a> Flash pamět 512KB a 4MB</li>
</ul>
<h3>Espressif Systems</h3>
<ul>
<li><strong>ESP-WROOM-02</strong> - PCB anténa, 2MiB Flash</li>
<li><strong>ESP-WROOM-02D</strong> - PCB anténa, 2MiB Flash</li>
<li><strong>ESP-WROOM-02U</strong> - U.FL anténa, 2MiB Flash</li>
<li><strong>ESP-WROOM-S2</strong> - PCB anténa 2MiB Flash</li>
</ul>
<h3><a href="http://www.ai-thinker.com/">Ai-Thinker</a></h3>
<ul>
<li><strong>ESP-01S</strong> - PCB anténa, 1MiB Flash</li>
<li><strong>ESP-01M</strong> - PCB anténa, 1MiB Flash</li>
<li><strong>ESP-07S</strong> - U.FL anténa, 4MiB Flash</li>
<li><strong>ESP-08S</strong> - bez Wi-Fi, 4MiB Flash</li>
<li><strong>ESP-12F</strong> - PCB anténa, 4MiB Flash</li>
<li><strong>ESP-12S</strong> - PCB anténa, 4MiB Flash</li>
</ul>
<h3><a href="https://www.wemos.cc/en/latest/">WeMos</a></h3>
<ul>
<li><strong>D1 R2</strong> - PCB anténa, 1MiB Flash</li>
<li><strong><a href="https://www.wemos.cc/en/latest/d1/d1_mini.html">D1 mini</a></strong> - PCB anténa, 4MiB Flash</li>
<li><strong>D1 mini Lite</strong> - PCB anténa, 1MiB Flash</li>
<li><strong>D1 mini Pro</strong> - U.FL anténa, 16MiB Flash</li>
</ul>
<h2><a href="https://www.espressif.com/en/products/socs/esp32">ESP32</a></h2>
<ul>
<li>uvedena 2016</li>
<li>160 - 240 MHz</li>
<li>FPU</li>
<li>32-bit MCU Single &amp; Dual Core</li>
<li>2.4 GHz Wi-Fi</li>
<li>Bluetooth / Bluetooth LE</li>
<li>Camera Bus</li>
<li>Hall Sensor</li>
<li>SD Interface</li>
</ul>
<h3>Espressif Systems</h3>
<ul>
<li><strong>ESP32-WROOM-32</strong> - 240MHz, 520KB RAM, 4MB Flash, 2.4GHz, BLE 4.2, 26 GPIO</li>
<li><strong>ESP32-WROVER</strong> - 240MHz, 520KB RAM + 8MB PSRAM, 4MB Flash, 2,4GHz, BLE 4.2, 26 GPIO</li>
<li><strong>ESP32-PICO-D4</strong> - 240MHz, 520KB RAM, 4MB Flash, 2.4GHz, BLE 4.2, 19 GPIO, prcek</li>
<li><strong>ESP32-CAM</strong> - 240MHz, 520KB RAM, 4MB Flash, 2.4GHz, BLE 4.2, 9 GPIO, integrovaná kamera</li>
</ul>
<h2>ESP32-S</h2>
<ul>
<li>
<p>uvedena 2020</p>
</li>
<li>
<p>240 MHz</p>
</li>
<li>
<p>Camera Bus</p>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-s2">S2</a></h3>
<ul>
<li>32-bit Single Core MCU</li>
<li>2.4 GHz Wi-Fi</li>
<li>nemá Bluetooth</li>
<li>13-bit ADC</li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-s3">S3</a></h3>
<ul>
<li>32-bit Dual Core MCU</li>
<li>2.4 GHz Wi-Fi</li>
<li>Bluetooth 5 (LE)</li>
<li>podporuje extérní paměť</li>
</ul>
</li>
</ul>
<h2>ESP32-C</h2>
<ul>
<li>uvedena 2020</li>
<li>RISC-V procesor</li>
<li>120 - 160MHz</li>
<li>jedno jádrové</li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-c2">C2</a></h3>
<ul>
<li>32-bit RISC-V MCU</li>
<li>2.4 GHz Wi-Fi</li>
<li>Bluetooth 5 (LE)</li>
<li>náhrada za ESP8266</li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-c3">C3</a></h3>
<ul>
<li>32-bit RISC-V MCU</li>
<li>2.4 GHz Wi-Fi</li>
<li>Bluetooth 5 (LE)</li>
<li>má RTC</li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-c6">C6</a></h3>
<ul>
<li>32-bit RISC-V MCU</li>
<li>2.4 GHz <a href="https://cs.wikipedia.org/wiki/Wi-Fi_6">Wi-Fi 6</a></li>
<li>Bluetooth 5 (LE)</li>
<li><a href="https://en.wikipedia.org/wiki/IEEE_802.15.4">IEEE 802.15.4 (LR-WPAN)</a></li>
<li>podpora <a href="https://en.wikipedia.org/wiki/Thread_(network_protocol)">THREAD</a></li>
<li>podpora <a href="https://en.wikipedia.org/wiki/Zigbee">ZIGBEE</a></li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-c61">C61</a></h3>
<ul>
<li>uvedena 2024</li>
<li>160 MHz</li>
<li><a href="https://en.wikipedia.org/wiki/Wi-Fi_6">Wi-Fi 6</a></li>
<li>podpora <a href="https://cs.wikipedia.org/wiki/Matter_(standard)">Matter</a> (<a href="https://docs.espressif.com/projects/esp-matter/en/latest/esp32/">ESP Matter SDK</a>)</li>
<li>32-bit RISC-V MCU</li>
<li>2.4 a 5 GHz</li>
<li>Bluetooth 5 (LE)</li>
<li>může být použit jako koprocesor</li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-c5">C5</a></h3>
<ul>
<li>uvedena 2024</li>
<li>240 MHz</li>
<li>32-bit RISC-V MCU</li>
<li><a href="https://en.wikipedia.org/wiki/Wi-Fi_6">Wi-Fi 6</a></li>
<li>podporuje <a href="https://www.ruijienetworks.com/support/faq/what-is-dual-band-wi-fi">Dual Band</a> - 2.4 a 5 GHz</li>
<li>Bluetooth 5 (LE)</li>
<li>podporuje externí flash paměť</li>
<li>může být použit jako koprocesor</li>
</ul>
<h2>ESP32-H</h2>
<ul>
<li>uvedena 2023</li>
<li>RISC-V</li>
<li>96 MHz</li>
<li>zaměření na IoT aplikace</li>
<li>podporuje <a href="https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/spi_flash/index.html">externí paměť</a></li>
<li>podpora <a href="https://en.wikipedia.org/wiki/Thread_(network_protocol)">THREAD</a></li>
<li>podpora <a href="https://en.wikipedia.org/wiki/Zigbee">ZIGBEE</a></li>
<li>
</li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-h2">H2</a></h3>
<ul>
<li>32-bit RISC-V MCU</li>
<li>Bluetooth 5 (LE)</li>
<li><a href="https://en.wikipedia.org/wiki/IEEE_802.15.4">IEEE 802.15.4 (LR-WPAN)</a></li>
</ul>
<h2>ESP32-P</h2>
<ul>
<li>uvedena 2024</li>
<li>400 MHz</li>
<li>RISC-V</li>
<li>FPU</li>
<li>zaměřena na vysoký výkon</li>
<li>nemá Wi-Fi</li>
<li>nemá Bluetooth</li>
</ul>
<h3><a href="https://www.espressif.com/en/products/socs/esp32-p4">P4</a></h3>
<ul>
<li>32-bit Dual Core RISC-V MCU</li>
</ul>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2024%2F10%2F13%2Fzakladni-prehled-espcek%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2024/10/13/zakladni-prehled-espcek/">Základní přehled ESPček</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSH připojení pomocí ESP32</title>
		<link>https://www.hardwired.dev/2024/09/25/ssh-pripojeni-pomoci-esp32/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Wed, 25 Sep 2024 12:09:47 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[espressif]]></category>
		<category><![CDATA[home-automation]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[libssh-esp32]]></category>
		<category><![CDATA[platformio]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[wifi]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2356</guid>

					<description><![CDATA[<p>V dnešním článku se podíváme na to, jak se z ESP32 development boardu připojit pomocí SSH ke vzdálenému počítači. Pro &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2024/09/25/ssh-pripojeni-pomoci-esp32/">SSH připojení pomocí ESP32</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>V dnešním článku se podíváme na to, jak se z <a href="https://vi.aliexpress.com/item/1005001621773806.html">ESP32 development boardu</a> připojit pomocí <a href="https://cs.wikipedia.org/wiki/Secure_Shell">SSH</a> ke vzdálenému počítači.</p>
<p>Pro vývoj je použito <a href="https://platformio.org/">PlatformIO</a>.</p>
<h1>platformio.ini</h1>
<pre><code class="language-ini">[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps = ewpa/LibSSH-ESP32@^4.2.0</code></pre>
<h1>main.cpp</h1>
<p>Jediná externí závislost je <code>libssh-esp32</code>. </p>
<pre><code class="language-cpp">#include &lt;Arduino.h&gt;
#include &lt;WiFi.h&gt;
#include &lt;libssh_esp32.h&gt;
#include &quot;libssh_esp32_config.h&quot;
#include &lt;libssh/libssh.h&gt;
#include &lt;vector&gt;
#include &lt;string&gt;</code></pre>
<p>Budeme potřebovat SSID WiFi sítě a heslo.</p>
<pre><code class="language-cpp">const char *ssid = &quot;ssid-vasi-wifi&quot;;
const char *password = &quot;vase-nejtajnejsi-heslo&quot;;</code></pre>
<p>Potřebujeme nastavit přihlašovací údaje pro SSH a příkaz který po přihlášení provedeme.</p>
<pre><code class="language-cpp">const int ssh_port = 22;
const char *ssh_username = &quot;pi&quot;;
const char *ssh_password = &quot;super-tajne-heslo&quot;;
const char *ssh_command = &quot;ls -l&quot;;</code></pre>
<p>Dále seznam IP adres serverů na které se chceme připojit.</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; server_ips = {
    &quot;192.168.1.254&quot;,
};</code></pre>
<p>Vytvoříme funkci pro připojení k WiFi. Na konci vypíšeme do konzole MAC adresu přístupového bodu, ke kterému jsme se připojili.</p>
<pre><code class="language-cpp">void connectToWiFi()
{
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(1000);
        Serial.println(&quot;Connecting to WiFi..&quot;);
    }
    Serial.print(&quot;Připojeno k AP s MAC: &quot;);
    Serial.println(WiFi.BSSIDstr());
}</code></pre>
<p>Ted ta nejdelší část. Funkce co vytvoří SSH spojení, provede příkaz a výsledek vypíše na standardní výstup. Funkce si po sobě uklízí.</p>
<pre><code class="language-cpp">/**
 * Execute SSH Command
 *
 * @param ip Server IP
 * @param username SSH Username
 * @param password SSH Password
 * @param command Command to execute
 */
void executeSSHCommand(const char *ip, const char *username, const char *password, const char *command)
{
    // Create a new SSH session
    ssh_session session = ssh_new();
    if (session == NULL)
    {
        Serial.println(&quot;Failed to create SSH session&quot;);
        return;
    }

    // Set SSH options for the session
    ssh_options_set(session, SSH_OPTIONS_HOST, ip);
    ssh_options_set(session, SSH_OPTIONS_USER, username);

    // Connect to SSH server
    int rc = ssh_connect(session);
    if (rc != SSH_OK)
    {
        Serial.println(&quot;Failed to connect to SSH server&quot;);
        return;
    }

    // Verify the server&#039;s identity
    rc = ssh_userauth_password(session, NULL, password);
    if (rc != SSH_AUTH_SUCCESS)
    {
        Serial.println(&quot;Failed to authenticate&quot;);
        return;
    }

    // Create a new SSH channel
    ssh_channel channel = ssh_channel_new(session);
    if (channel == NULL)
    {
        Serial.println(&quot;Failed to create SSH channel&quot;);
        return;
    }

    // Open a new SSH session
    rc = ssh_channel_open_session(channel);
    if (rc != SSH_OK)
    {
        Serial.println(&quot;Failed to open SSH session&quot;);
        return;
    }

    // Execute the command
    rc = ssh_channel_request_exec(channel, command);
    if (rc != SSH_OK)
    {
        Serial.println(&quot;Failed to execute command&quot;);
        return;
    }

    // Read the output of the command
    char buffer[256];
    int nbytes; // Number of bytes read
    nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
    while (nbytes &gt; 0)
    {
        if (write(1, buffer, nbytes) != nbytes) // Write to stdout
        {
            Serial.println(&quot;Failed to write to stdout&quot;);
            return;
        }
        nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
    }

    // Check if there was an error reading from the channel
    if (nbytes &lt; 0)
    {
        Serial.println(&quot;Failed to read from SSH channel&quot;);
        return;
    }

    // Send EOF and close the channel
    ssh_channel_send_eof(channel);

    // Close the channel
    ssh_channel_close(channel);

    // Free the channel
    ssh_channel_free(channel);

    // Disconnect the session
    ssh_disconnect(session);

    // Free the session
    ssh_free(session);
}</code></pre>
<p>Teď potřebujeme funkci která provede SSH příkaz pro všechny naše servery, které jsou definované v <code>server_ips</code>.</p>
<pre><code class="language-cpp">/**
 * Execute SSH Command on all servers
 * 
 * @param username SSH Username
 * @param password SSH Password
 * @param command Command to execute
 */
void executeSSHCommandOnAllServers(const char *username, const char *password, const char *command)
{
    for (std::string ip : server_ips)
    {
        executeSSHCommand(ip.c_str(), username, password, command);
    }
}</code></pre>
<p>Teď už jen zbývá provést vše při startu ESPčka.</p>
<pre><code class="language-cpp">void setup()
{
    Serial.begin(115200);
    while (!Serial)
    {
        ; // Wait for serial to be ready
    }

    connectToWiFi();
    ssh_init();
    executeSSHCommandOnAllServers(ssh_username, ssh_password, ssh_command);
}</code></pre>
<p>Hlavní smyčku programu pro tento příklad necháme odpočívat.</p>
<pre><code class="language-cpp">void loop()
{
    delay(1000); // Delay for 1 second
}</code></pre>
<p>To je vše. Po kompilaci, nahrání kódu a spuštění ESPčka se připojí k WiFi a poté provede SSH připojení na zadané IP adresy a provede <code>ls -l</code> příkaz. Ten vypíše do konzole.</p>
<h1>main.cpp full</h1>
<pre><code class="language-cpp">#include &lt;Arduino.h&gt;
#include &lt;WiFi.h&gt;
#include &lt;libssh_esp32.h&gt;
#include &quot;libssh_esp32_config.h&quot;
#include &lt;libssh/libssh.h&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

// WiFi Credentials
const char *ssid = &quot;ssid-vasi-wifi&quot;;
const char *password = &quot;vase-nejtajnejsi-heslo&quot;;

// SSH Credentials
const int ssh_port = 22;
const char *ssh_username = &quot;pi&quot;;
const char *ssh_password = &quot;super-tajne-helso&quot;;
const char *ssh_command = &quot;ls -l&quot;;

// Server IPs List
std::vector&lt;std::string&gt; server_ips = {
    &quot;192.168.1.254&quot;,
};

/**
 * Connect to WiFi
 */
void connectToWiFi()
{
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(1000);
        Serial.println(&quot;Connecting to WiFi..&quot;);
    }
    Serial.print(&quot;Připojeno k AP s MAC: &quot;);
    Serial.println(WiFi.BSSIDstr());
}

/**
 * Execute SSH Command
 *
 * @param ip Server IP
 * @param username SSH Username
 * @param password SSH Password
 * @param command Command to execute
 */
void executeSSHCommand(const char *ip, const char *username, const char *password, const char *command)
{
    // Create a new SSH session
    ssh_session session = ssh_new();
    if (session == NULL)
    {
        Serial.println(&quot;Failed to create SSH session&quot;);
        return;
    }

    // Set SSH options for the session
    ssh_options_set(session, SSH_OPTIONS_HOST, ip);
    ssh_options_set(session, SSH_OPTIONS_USER, username);

    // Connect to SSH server
    int rc = ssh_connect(session);
    if (rc != SSH_OK)
    {
        Serial.println(&quot;Failed to connect to SSH server&quot;);
        return;
    }

    // Verify the server&#039;s identity
    rc = ssh_userauth_password(session, NULL, password);
    if (rc != SSH_AUTH_SUCCESS)
    {
        Serial.println(&quot;Failed to authenticate&quot;);
        return;
    }

    // Create a new SSH channel
    ssh_channel channel = ssh_channel_new(session);
    if (channel == NULL)
    {
        Serial.println(&quot;Failed to create SSH channel&quot;);
        return;
    }

    // Open a new SSH session
    rc = ssh_channel_open_session(channel);
    if (rc != SSH_OK)
    {
        Serial.println(&quot;Failed to open SSH session&quot;);
        return;
    }

    // Execute the command
    rc = ssh_channel_request_exec(channel, command);
    if (rc != SSH_OK)
    {
        Serial.println(&quot;Failed to execute command&quot;);
        return;
    }

    // Read the output of the command
    char buffer[256];
    int nbytes; // Number of bytes read
    nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
    while (nbytes &gt; 0)
    {
        if (write(1, buffer, nbytes) != nbytes) // Write to stdout
        {
            Serial.println(&quot;Failed to write to stdout&quot;);
            return;
        }
        nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0);
    }

    // Check if there was an error reading from the channel
    if (nbytes &lt; 0)
    {
        Serial.println(&quot;Failed to read from SSH channel&quot;);
        return;
    }

    // Send EOF and close the channel
    ssh_channel_send_eof(channel);

    // Close the channel
    ssh_channel_close(channel);

    // Free the channel
    ssh_channel_free(channel);

    // Disconnect the session
    ssh_disconnect(session);

    // Free the session
    ssh_free(session);
}

/**
 * Execute SSH Command on all servers
 *
 * @param username SSH Username
 * @param password SSH Password
 * @param command Command to execute
 */
void executeSSHCommandOnAllServers(const char *username, const char *password, const char *command)
{
    for (std::string ip : server_ips)
    {
        executeSSHCommand(ip.c_str(), username, password, command);
    }
}

void setup()
{
    Serial.begin(115200);
    while (!Serial)
    {
        ; // Wait for serial to be ready
    }

    connectToWiFi();
    ssh_init();
    executeSSHCommandOnAllServers(ssh_username, ssh_password, ssh_command);
}

void loop()
{
    delay(1000); // Delay for 1 second
}
</code></pre>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2024%2F09%2F25%2Fssh-pripojeni-pomoci-esp32%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2024/09/25/ssh-pripojeni-pomoci-esp32/">SSH připojení pomocí ESP32</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rozdíl mezi ESP8266 a ESP32</title>
		<link>https://www.hardwired.dev/2024/01/08/rozdil-mezi-esp8266-a-esp32/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Mon, 08 Jan 2024 12:43:03 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[arduinoide]]></category>
		<category><![CDATA[BT]]></category>
		<category><![CDATA[esp]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[esp8266]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[nodemcu]]></category>
		<category><![CDATA[wifi]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=1996</guid>

					<description><![CDATA[<p>Mnoho lidí, kteří nejsou obeznámeni s elektronikou, se často snaží rozlišit mezi ESP8266 a ESP32. Lidé mají mnoho pochybností o &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2024/01/08/rozdil-mezi-esp8266-a-esp32/">Rozdíl mezi ESP8266 a ESP32</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p><strong>Mnoho lidí, kteří nejsou obeznámeni s elektronikou, se často snaží rozlišit mezi ESP8266 a ESP32. Lidé mají mnoho pochybností o tom, kterou desku použít a jaký je mezi nimi rozdíl.</strong></p>
<p>Jak ESP32, tak ESP8266 jsou levné SOC (Systems on Chip) založené na WiFi, dokonale vhodné pro kutilské projekty na internetu věcí. Oba mají 32bitové procesory, ESP32 je dvoujádrový 80MHz až 240MHz CPU a ESP8266 je 80MHz jednojádrový procesor. Tyto moduly jsou dodávány s GPIO, které podporují různé protokoly jako SPI, I2C, UART, ADC, DAC a PWM. ESP32 a ESP8266 pracují při 3,3V.</p>
<p><strong>ESP8266</strong></p>
<p><a href="https://www.hardwired.dev/wp-content/uploads/2024/01/nodemcu_pinout1.webp"><img decoding="async" class="aligncenter size-full wp-image-1998" src="https://www.hardwired.dev/wp-content/uploads/2024/01/nodemcu_pinout1.webp" alt="" width="960" height="499" srcset="https://www.hardwired.dev/wp-content/uploads/2024/01/nodemcu_pinout1.webp 960w, https://www.hardwired.dev/wp-content/uploads/2024/01/nodemcu_pinout1-300x156.webp 300w, https://www.hardwired.dev/wp-content/uploads/2024/01/nodemcu_pinout1-768x399.webp 768w" sizes="(max-width: 960px) 100vw, 960px" /></a></p>
<p>Modul ESP-12E na vývojové desce obsahuje čip ESP8266 s mikroprocesorem Tensilica Xtensa 32-bit LX106 RISC, který podporuje RTOS a pracuje na 80 až 160 MHz nastavitelné taktovací frekvenci. ESP8266 je levné, uživatelsky přívětivé zařízení pro připojení vašich IoT projektů k internetu. Nodemcu ESP8266 obsahuje Wi-Fi transceiver 802.11b/g/n HT40, který umožňuje připojení k WiFi síti a interakci s internetem, modul může fungovat jako přístupový bod (vytvoření hotspotu) i stanice (připojení k Wi-Fi), může jednoduše načíst data a odeslat je na internet, díky čemuž je internet věcí (IoT) co nejjednodušší. To rozšiřuje možnosti ESP8266 NodeMCU.</p>
<p>Tento modul má dostatečně výkonnou integrovanou kapacitu zpracování a úložiště, která umožňuje jeho integraci se senzory a dalšími zařízeními specifickými pro aplikace prostřednictvím jeho GPIO s minimálním vývojem předem a minimálním zatížením za běhu. 128 KB RAM a 4 MB Flash paměti (pro ukládání aplikací a dat), což je více než dost na to, aby zvládlo obrovské řetězce, které tvoří webové stránky, data JSON/XML a vše ostatní, co v dnešní době házíme do zařízení IoT.</p>
<p>Modul ESP8266 NodeMCU je k dispozici ve dvou variantách, kde jedna je vestavěna s můstkem CP2102 USB-UART a druhá s můstkem CH340 USB-UART.</p>
<p><b>Napájení</b></p>
<p>Deska má regulátor napětí LDO pro udržení stabilního napětí na 3,3V, zatímco provozní napětí ESP8266 je 3V až 3,6V. Když ESP8266 odebírá při RF přenosech až 80mA, dokáže spolehlivě dodat až 600mA, což by mělo být více než dostatečné. Výstup regulátoru je také vylomen na jednu ze stran desky a označen jako 3V3. Přes tento pin lze napájet externí komponenty. Integrovaný MicroB USB konektor poskytuje napájení ESP8266 NodeMCU. Pin VIN můžete použít k přímému napájení ESP8266 a jeho periferií, pokud poskytujete napájení prostřednictvím 5V zdroje.</p>
<p>Pro komunikaci vyžaduje ESP8266 3,3V napájecí zdroj a 3,3V logické úrovně. Piny GPIO nemají toleranci 5V.</p>
<h2><b>PINOUT</b></h2>
<p>Wifi modul ESP8266 má na obou stranách vývojové desky k dispozici celkem 17 GPIO pinů. Tyto piny lze přiřadit všem druhům periferních funkcí.</p>
<p>&nbsp;</p>
<ul>
<li><b>POWER PIN </b>: Napájecí kolíky se skládají z jednoho kolíku VIN a tří kolíků 3,3V. Pokud máte regulovaný 5V zdroj napájení, můžete využít pin VIN k přímému napájení ESP8266 a jeho periferií. 3,3V kolíky jsou výstupy z regulátoru napětí zabudovaného do desky. Prostřednictvím těchto pinů lze napájet externí komponenty.</li>
<li><b>I2C kolíky </b>: Používají se k připojení všech I2C senzorů a periferií vašeho projektu. I2C Master a Slave jsou podporovány.</li>
<li><b>GPIO PINY: </b>ESP8266 NodeMCU obsahuje 17 GPIO pinů, které lze programově přiřadit různým úlohám, jako je I2C, I2S, UART, PWM, IR dálkové ovládání, LED světlo a tlačítko. Každé GPIO s digitální schopností lze naladit na vnitřní pull-up nebo pull-down, nebo příliš vysokou impedanci.</li>
<li><b>GROUND: </b>Je to zemnící kolík vývojové desky ESP8266 NodeMCU.</li>
<li><b>ADC CHANNEL: </b>NodeMCU má vestavěný 10bitový přesný SAR ADC. Testování napájecího napětí pinu VDD3P3 a testování vstupního napětí pinu TOUT jsou dvě funkce, které lze implementovat pomocí ADC. Nelze je implementovat současně.</li>
<li><b>PINY UART: </b>NodeMCU ESP8266 obsahuje dva porty UART, UART0 a UART1, které mohou komunikovat rychlostí až 4,5 Mbps a umožňují asynchronní komunikaci (RS232 a RS485). Pro komunikaci lze použít UART0 (piny TXD0, RXD0, RST0 a CTS0). Podporuje kontrolu tekutin. Protože však UART1 (vývod TXD1) pouze přenáší data, obvykle se používá k tisku protokolů.</li>
<li><b>SPI PINY: </b>ESP8266 má dvě SPI (SPI a HSPI), které lze použít v režimu slave a master.</li>
<li><b>PWM PINY: </b>Na desce plošných spojů jsou čtyři kanály pulzní šířkové modulace (PWM). Výstup PWM lze programově implementovat a využít k pohonu digitálních motorů a LED. Frekvenční rozsah PWM je nastavitelný od 1000 μs do 10000 μs, tj. mezi 100 Hz a 1 kHz.</li>
<li><b>OVLÁDACÍ PINY: </b>slouží k ovládání mikrokontroléru ESP8266. Mezi tyto piny patří Enable pin (EN), Reset pin (RST) a WAKE.</li>
</ul>
<p>&nbsp;</p>
<p>Na ESP8266 NodeMCU jsou dvě tlačítka. Tlačítko Reset, označené RST a umístěné v levém horním rohu, slouží k resetování čipu ESP8266. Tlačítko FLASH se nachází v levém dolním rohu a slouží k aktualizaci firmwaru. Na desce je také uživatelsky programovatelný LED indikátor, který je propojen s pinem D0.</p>
<p><b>ESP 32</b></p>
<p><a href="https://www.hardwired.dev/wp-content/uploads/2024/01/ESP32_600x600.webp"><img decoding="async" class="aligncenter size-full wp-image-1999" src="https://www.hardwired.dev/wp-content/uploads/2024/01/ESP32_600x600.webp" alt="" width="600" height="600" srcset="https://www.hardwired.dev/wp-content/uploads/2024/01/ESP32_600x600.webp 600w, https://www.hardwired.dev/wp-content/uploads/2024/01/ESP32_600x600-300x300.webp 300w, https://www.hardwired.dev/wp-content/uploads/2024/01/ESP32_600x600-150x150.webp 150w, https://www.hardwired.dev/wp-content/uploads/2024/01/ESP32_600x600-400x400.webp 400w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>Vývojová deska je vybavena modulem ESP-WROOM-32 obsahujícím 32bitový mikroprocesor Tensilica Xtensa Dual-Core LX6. Tento procesor je srovnatelný s ESP8266, až na to, že obsahuje dvě CPU jádra (každá z nich lze provozovat samostatně), taktovací frekvenci 80 až 240 MHz a výkon až 600 DMIPS (Dhrystone Million Instructions Per Second).</p>
<p>&nbsp;</p>
<p>ESP32 integruje 802.11b/g/n HT40 Wi-Fi transceiver, který umožňuje nejen připojení k WiFi síti pro interakci s internetem, ale také vytvoření vlastní sítě, ke které se mohou přímo připojit další zařízení. WiFi Direct podporuje také ESP32, což je vhodná alternativa pro peer-to-peer připojení, která nevyžadují přístupový bod. Je jednodušší nastavit WiFi Direct a má podstatně vyšší rychlosti přenosu dat než Bluetooth. Čip také podporuje jak Bluetooth 4.0 (BLE/Bluetooth Smart), tak Bluetooth Classic (BT), díky čemuž je ještě všestrannější.</p>
<p>Nodemcu ESP32 je řada levných mikrokontrolérů s nízkou spotřebou energie s vestavěným ESP32 Wi-Fi a duálním Bluetooth. ESP32 je navržen pro aplikace internetu věcí s nízkou spotřebou. Jeho vysoký výpočetní výkon v kombinaci s vestavěnými funkcemi Wi-Fi, Bluetooth a Deep Sleep, 520 KB SRAM, 448 KB ROM a 4 MB Flash paměti (pro ukládání softwaru a dat) je vhodný pro většinu přenosných IoT zařízení.</p>
<p>&nbsp;</p>
<p><b>Napájení </b></p>
<p>Deska má regulátor napětí LDO pro udržení stabilního napětí na 3,3 V, zatímco rozsah provozního napětí Arduino ESP32 je 2,2 V až 3,6 V. Když ESP32 odebírá při RF přenosech až 250 mA, dokáže spolehlivě dodat až 600 mA, což by mělo být více než dostatečné. Výstup regulátoru je také vylomen na jednu ze stran desky a označen jako 3V3. Přes tento pin lze napájet externí komponenty. Integrovaný MicroB USB port poskytuje napájení vývojové desce ESP32. Pin VIN můžete použít k napájení ESP32 a jeho periferií přímo přes 5V externí napájení.</p>
<p>Pro komunikaci vyžaduje ESP32 3,3V napájení a 3,3V logické úrovně. Piny GPIO nemají toleranci 5V.</p>
<p>&nbsp;</p>
<p><b>PINOUT</b></p>
<p>Deska ESP-32 má 48 vstupně/výstupních pinů pro všeobecné použití, z nichž pouze 25 je k dispozici jako pin headery na obou stranách desky ESP-32. Tyto piny lze přiřadit všem druhům periferních funkcí.</p>
<p>&nbsp;</p>
<ul>
<li><b>POWER PINS </b>: Pin VIN a pin 3,3V jsou dva napájecí kolíky. Pokud máte řízený 5V zdroj napájení, můžete využít pin VIN k přímému napájení ESP32 a jeho periferií. Výstup palubního regulátoru napětí je připojen na pin 3,3V. Přes tento pin lze napájet externí komponenty.</li>
<li><b>ARDUINO PINS: </b>hardwarové I2C a SPI piny ESP32, které můžete použít k připojení všech druhů senzorů a periferií k vašemu projektu.</li>
<li><b>GPIO PINY: </b>Vývojová deska ESP32 obsahuje 25 GPIO pinů, které lze programově přiřadit různým funkcím. Každé digitálně aktivované GPIO lze nastavit na vysokou impedanci nebo interní pull-up nebo pull-down. Může být také nastaven na spouštění na hraně nebo na úrovni spouštění pro generování přerušení CPU, když je nakonfigurován jako vstup</li>
<li><b>GROUND: </b>Zemnicí kolík vývojové desky ESP32.</li>
<li><b>ADC CHANNELS: </b>Deska má 12bitové SAR ADC a 15 měřicích kanálů (analogové piny). Některé z těchto pinů lze využít k sestavení programovatelného zesilovače zesílení pro měření malých analogových signálů. ESP32 je také schopen měřit napětí, když je v režimu spánku.</li>
<li><b>DAC CHANNELS: </b>Dva 8bitové DAC kanály v obvodu převádějí digitální signály na skutečné analogové napětí. Tento duální DAC může řídit další obvody. TouchPady Deska nabízí 9 kapacitních snímacích GPIO, které detekují kapacitní odchylky způsobené přímým kontaktem GPIO nebo blízkostí prstu nebo jiných předmětů.</li>
<li><b>UART PINS: </b>Vývojová deska ESP32 obsahuje dvě rozhraní UART, UART0 a UART2, která zajišťují asynchronní komunikaci (RS232 a RS485) a IrDA rychlostí až 5 Mbps. UART poskytuje hardwarovou správu signálů CTS a RTS a také softwarové řízení toku (XON a XOFF).</li>
<li><b>SPI PINS: </b>SPI Pins ESP32 obsahuje tři SPI (SPI, HSPI a VSPI) v režimu slave a master. Všechny SPI lze také použít k připojení k externí paměti Flash/SRAM a LCD.</li>
<li><b>~ PWM PINY: </b>Deska má 25 kanálů (téměř všechny GPIO piny) pinů PWM řízených řadičem Pulse Width Modulation (PWM). Výstup PWM lze použít pro řízení digitálních motorů a LED. Regulátor se skládá z PWM časovačů a PWM operátora. Každý časovač poskytuje časování v synchronní nebo nezávislé formě a každý operátor PWM generuje průběh pro jeden kanál PWM.</li>
</ul>
<p><b>EN PIN:</b> Používá se k povolení ESP32. Čip je povolen, když je vytažen HIGH. Při vytažení LOW čip pracuje na minimální výkon.</p>
<p><strong>Který z nich je lepší, ESP8266 VS ESP32?</strong></p>
<p>ESP8266 je velmi oblíbená a dostupná platforma pro implementaci energeticky účinných aplikací IoT, které fungují na základě připojení Wi-Fi.<br />
Espressif ESP32 je zase relativně nové a pokročilejší řešení, kde tvůrci zvýšili rychlost Wi-Fi, přidali podporu Bluetooth 4.2 a Bluetooth Low Energy a zvýšili počet vstupů/výstupů.</p>
<p>ESP32 má více GPIO než ESP8266 a v kódu můžete určit, které piny se používají pro UART, I2C a SPI. To je možné díky schopnosti multiplexování čipu ESP32, který umožňuje přiřadit četné funkce jedinému kolíku. Signály PWM lze nastavit v libovolném GPIO s konfigurovatelnými frekvencemi a pracovními cykly kódu. Analogové piny jsou statické, ale ESP32 podporuje měření na 18 kanálech (analogové piny), zatímco ESP8266 Arduino má pouze jeden 10bitový ADC pin. ESP32 podporuje také dva 8bitové kanály DAC. Kromě toho ESP32 obsahuje 10 kapacitních snímacích GPIO, které detekují dotyk a lze je použít ke spouštění událostí nebo probuzení ESP32 z hlubokého spánku. ESP32 ve výchozím nastavení podporuje komunikační protokol Bluetooth, zatímco ESP8266 nikoli</p>
<h2><b>Bezdrátová komunikace</b></h2>
<p>Pozoruhodný rozdíl oproti ESP32 je jeho Bluetooth schopnost, která umožňuje ESP32 neomezit se pouze na Wi-Fi komunikaci, což umožňuje jeho integraci do více projektů. Podporuje klasické Bluetooth i Bluetooth Low Energy. Zatímco ESP8266 nepodporuje Bluetooth.</p>
<p><b>zpracovává se</b></p>
<p>ESP8266 má vestavěný procesor, ale kvůli multitaskingu, který je součástí aktualizace Wi-Fi stacku, většina aplikací používá samostatný mikrokontrolér pro propojení se senzory, digitální I/O a zpracování dat. Při používání ESP32 možná nebudete muset používat další mikrokontrolér, protože ESP32 má duální 32bitové mikroprocesory a poběží na breakout deskách a modulech od 160 MHz do 240 MHz. To poskytuje dostatečnou rychlost pro jakoukoli aplikaci, která vyžaduje mikrokontrolér s konektivitou.</p>
<ul>
<li>ESP32 je rychlejší než ESP8266;</li>
<li>ESP32 přichází s více GPIO s více funkcemi;</li>
<li>ESP32 podporuje analogová měření na 18 kanálech (analogové piny) oproti pouze jednomu 10bitovému ADC pinu na ESP8266;</li>
<li>ESP32 podporuje Bluetooth, zatímco ESP8266 ne;</li>
<li>ESP32 je dvoujádrový a ESP8266 je jednojádrový;</li>
<li>ESP8266 je levnější než ESP32;</li>
<li>ESP8266 má širší komunitu (i když si to v tuto chvíli nemyslíme, rozdíl je tak velký);</li>
<li>U mnoha projektů IoT a Wi-Fi může ESP8266 tuto práci zvládnout za nižší cenu;</li>
<li>Obě desky lze naprogramovat pomocí Arduino IDE nebo jiných podporovaných IDE.</li>
<li>Obě desky podporují firmware MicroPython.</li>
</ul>
<p>Zde je srovnávací tabulka pro technické specifikace ESP8266 a ESP32:</p>
<div class="table-wrapper">
<table width="0">
<tbody>
<tr>
<td width="208"><strong>SPECIFIKACE</strong></td>
<td width="208"><strong>ESP8266</strong></td>
<td width="208"><strong>ESP32</strong></td>
</tr>
<tr>
<td width="208">MCU</td>
<td width="208">Xtensa Jednojádrový 32bitový L106</td>
<td width="208">Xtensa dvoujádrový 32bitový LX6 s 600 DMIPS</td>
</tr>
<tr>
<td width="208"> Wi-Fi 802.11 b/g/n</td>
<td width="208">ANO, HT20</td>
<td width="208">ANO, HT40</td>
</tr>
<tr>
<td width="208">ADC</td>
<td width="208">10bitový</td>
<td width="208">12bitový</td>
</tr>
<tr>
<td width="208"> Hardware/Software PWM</td>
<td width="208">   Žádný / 8 kanálů</td>
<td width="208">1/16 kanál</td>
</tr>
<tr>
<td width="208">Typická frekvence</td>
<td width="208">80 MHz</td>
<td width="208">160 MHz</td>
</tr>
<tr>
<td width="208"> SRAM</td>
<td width="208">160 kB</td>
<td width="208">512 kB</td>
</tr>
<tr>
<td width="208">  GPIO</td>
<td width="208">17</td>
<td width="208">36</td>
</tr>
<tr>
<td width="208">Dotykový senzor</td>
<td width="208">ŽÁDNÝ</td>
<td width="208">ANO</td>
</tr>
<tr>
<td width="208">Bluetooth</td>
<td width="208">žádný</td>
<td width="208">Bluetooth 4.2</td>
</tr>
<tr>
<td width="208">SPI/I2C/I2S/UART</td>
<td width="208">2/1/2/2</td>
<td width="208">4/2/2/3</td>
</tr>
<tr>
<td width="208">ADC</td>
<td width="208">10bitový</td>
<td width="208">12bitový</td>
</tr>
<tr>
<td width="208">UMĚT</td>
<td width="208">ŽÁDNÝ</td>
<td width="208">1</td>
</tr>
<tr>
<td width="208">ROM</td>
<td width="208">Žádné programovatelné</td>
<td width="208">448 kB ROM pro bootování a základní funkce</td>
</tr>
<tr>
<td width="208">Pracovní teplota</td>
<td width="208">-40 °C až 125 °C</td>
<td width="208">-40 °C až 125 °C</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p><strong>Závěr</strong></p>
<p>Shrneme-li náš stručný přehled, můžeme říci, že ESP8266 je vynikající levný mikrokontrolér na bázi Wi-Fi, ale pokud potřebujete něco energeticky účinnějšího a kompatibilního s Bluetooth, zvažte jeho nástupce – modul ESP32. Mikrokontroléry ESP8266 a ESP32 SoC poskytují nadšencům internetové komunikační zařízení, ale ESP32 je o něco lepší volba . V každém případě jsou obě zařízení dobrými představiteli svých nik.</p>
<p>ESP32 a ESP8266 jsou levné moduly Wi-Fi , které jsou ideální pro projekty internetu věcí (IoT) a domácí automatizace .</p>
<p><em>EN zdroj: <a href="https://www.hnhcart.com/" target="_blank" rel="noopener">hnhcart.com</a></em></p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2024%2F01%2F08%2Frozdil-mezi-esp8266-a-esp32%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2024/01/08/rozdil-mezi-esp8266-a-esp32/">Rozdíl mezi ESP8266 a ESP32</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ESP32 RTC DS3231</title>
		<link>https://www.hardwired.dev/2023/02/28/esp32-rtc-ds3231/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Tue, 28 Feb 2023 22:17:51 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[at24c32]]></category>
		<category><![CDATA[clock]]></category>
		<category><![CDATA[ds3231]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rtc]]></category>
		<category><![CDATA[time]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=988</guid>

					<description><![CDATA[<p>Pokud potřebujete na ESP32 spouštět naplánované úlohy, určitě se nemůžete spoléhat na vnitřní časování. Budete potřebovat nějaký externí modul reálného &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2023/02/28/esp32-rtc-ds3231/">ESP32 RTC DS3231</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Pokud potřebujete na <strong>ESP32</strong> spouštět naplánované úlohy, určitě se nemůžete spoléhat na vnitřní časování. Budete potřebovat nějaký externí modul reálného času (<a href="https://sk.wikipedia.org/wiki/Hodiny_re%C3%A1lneho_%C4%8Dasu">RTC</a>), který vám na vyžádání vrátí přesný čas.</p>
<p>V bastlířské oblasti se hodně často používá <a href="https://lastminuteengineers.com/ds1307-rtc-arduino-tutorial/">DS1307</a>. Vyniká hlavně v tom, že je extrémně levný. Na <a href="https://www.aliexpress.com/item/32585872245.html">Aliexpressu</a> se dá koupit za necelých <strong>14 CZK</strong>. Cena kompenzuje určitou nepřesnost. Udává se zpoždění cca 5 minut za měsíc.</p>
<p>Sice několika násobně dražší, ale pořád směšně levný je <a href="https://lastminuteengineers.com/ds3231-rtc-arduino-tutorial/">DS3231</a>. Na <a href="https://www.aliexpress.com/item/32833136577.html">Aliexpressu</a> se dá pořídit za <strong>60 CZK</strong>.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2023/02/DS3231-AT24C32-aliexpress.jpg" alt="" /></p>
<p>U <a href="https://www.laskakit.cz/arduino-rtc-hodiny-realneho-casu-ds3231-at24c32/">Lásky</a> 128 CZK plus poštovné.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2023/02/DS3231-AT24C32-laskakit.jpg" alt="" /></p>
<p>Tento modul je daleko přesnější a obsahuje tepelně kompenzovaný krystalový oscilátor (TCXO), který odolává změnám teplot. Pro náš testovací projekt použijeme DS3231.</p>
<h1>DS3231</h1>
<p>Modul umí sledovat roky, měsíce, dny, hodiny, minuty a sekundy. Umí dokonce přestupné roky do roku 2100. Dokáže pracovat v 12 hodinovém nebo 24 hodinovém formátu. Obsahuje dva programovatelné alarmy.</p>
<p>Modul má piny pro připojení přes sběrnici I2C. Má také pin INT, který umí produkovat signál přerušení a pin SQW pro generování &quot;square wave&quot; signálu na frekvencích 1Hz, 4kHz, 8kHz nebo 32kHz.</p>
<p>Přesnost modulu je +-2 minuty za rok.</p>
<p>Modul se napájí pomocí knoflíkové baterie CR2032, LIR2032 nebo ekvivalentní o průměru 20mm. Při použití 220mAh baterie je teoretická životnost 8 let.</p>
<p>Modul obsahuje 32 bytový AT24C32 EEPROM paměťový čip s milionem zapisovacích cyklů. Neslouží pro běh hodin, může být použit pro zápis logů nebo libovolných dat.</p>
<p>Vyčerpávající popis modulu najdete na <a href="https://lastminuteengineers.com/ds3231-rtc-arduino-tutorial/">lastminuteengineers.com</a>.</p>
<h1>Zapojení</h1>
<p>Pomocí I2C připojíme k ESP modulu.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2023/02/DS3231-zapojeni.jpg" alt="" /></p>
<h1>Program</h1>
<p>Pokud nejsou hodiny nastaveny nebo mají starší čas, než je čas při kompilaci kódu, přenastaví se na aktuální čas. Po inicializaci modulu se vytvoří naplánovaná úloha pomocí modulu <code>TaskScheduler</code> a každých 10 sekund vypíše aktuální čas modulu do sériové konzole. Zbytek v komentovaném kódu.</p>
<h2>main.cpp</h2>
<pre><code class="language-cpp">/**
 * @file main.cpp
 * @author Hard Wired
 * @brief ESP32 I2C RTC test project.
 * @details
 *      Based on https://github.com/Makuna/Rtc/blob/master/examples/DS3231_Simple/DS3231_Simple.ino example.
 *      Modul tutorial https://lastminuteengineers.com/ds3231-rtc-arduino-tutorial/
 * @version 0.1
 * @date 2023-02-08
 */

#include &lt;Arduino.h&gt;

#include &lt;Wire.h&gt;
#include &lt;RtcDS3231.h&gt;
#include &lt;TaskScheduler.h&gt;

const int SECOND_IN_MILS = 1000;
const int TEN_SECONDS_IN_MILS = SECOND_IN_MILS * 10;

/**
 * @brief Vytvoření plánovače
 *
 */
Scheduler runner;

/**
 * @brief Vytvoření RTC objektu a připojení pomocí I2C sběrnice.
 *
 * @return RtcDS3231&lt;TwoWire&gt;
 */
RtcDS3231&lt;TwoWire&gt; Rtc(Wire);

/**
 * @brief Vytáhne z objektu &quot;Rtc&quot; poslední chybový stav a vypíše chybovou hlášku¨
 *        a dá vědět pomocí true/false.
 * @details see https://www.arduino.cc/reference/en/language/functions/communication/wire/endtransmission/
 *
 * @param errorTopic
 * @return true
 * @return false
 */
bool wasError(const char *errorTopic = &quot;&quot;)
{
    uint8_t error = Rtc.LastError();
    if (error != 0)
    {
        Serial.print(&quot;[&quot;);
        Serial.print(errorTopic);
        Serial.print(&quot;] WIRE communications error (&quot;);
        Serial.print(error);
        Serial.print(&quot;) : &quot;);

        switch (error)
        {
        case Rtc_Wire_Error_None:
            Serial.println(&quot;(none?!)&quot;);
            break;
        case Rtc_Wire_Error_TxBufferOverflow:
            Serial.println(&quot;transmit buffer overflow&quot;);
            break;
        case Rtc_Wire_Error_NoAddressableDevice:
            Serial.println(&quot;no device responded&quot;);
            break;
        case Rtc_Wire_Error_UnsupportedRequest:
            Serial.println(&quot;device doesn&#039;t support request&quot;);
            break;
        case Rtc_Wire_Error_Unspecific:
            Serial.println(&quot;unspecified error&quot;);
            break;
        case Rtc_Wire_Error_CommunicationTimeout:
            Serial.println(&quot;communications timed out&quot;);
            break;
        }
        return true;
    }
    return false;
}

/**
 * @brief Vypíše naformátované datum do sériové konzole.
 *
 * @param dt
 */
void printDateTime(const RtcDateTime &amp;dt)
{
    char buffer[20];

    sprintf(buffer, &quot;%d-%02d-%02d %02d:%02d:%02d&quot;, dt.Year(), dt.Month(), dt.Day(), dt.Hour(), dt.Minute(), dt.Second());

    Serial.println(buffer);
}

void printDateTimeAndTemperature()
{
    if (!Rtc.IsDateTimeValid())
    {
        if (!wasError(&quot;loop IsDateTimeValid&quot;))
        {
            // Common Causes:
            //    1) the battery on the device is low or even missing and the power line was disconnected
            Serial.println(&quot;RTC lost confidence in the DateTime!&quot;);
        }
    }

    RtcDateTime now = Rtc.GetDateTime();
    if (!wasError(&quot;loop GetDateTime&quot;))
    {
        printDateTime(now);
    }

    RtcTemperature temp = Rtc.GetTemperature();
    if (!wasError(&quot;loop GetTemperature&quot;))
    {
        temp.Print(Serial);
        // you may also get the temperature as a float and print it
        // Serial.print(temp.AsFloatDegC());
        Serial.println(&quot;C&quot;);
    }
}

/**
 * @brief Vytvoření naplánované úlohy. Poběží navždy a spustí se každých 10 sekund.
 *
 * @return Task
 */
Task PrintDateTimeAndTemperatureTask(TEN_SECONDS_IN_MILS, TASK_FOREVER, &amp;printDateTimeAndTemperature);

void setup()
{
    Serial.begin(115200);

    Serial.print(&quot;compiled: &quot;);
    // makro které expanduje datum při kompilaci kódu na &quot;mmm dd yyyy&quot; řetězec
    Serial.print(__DATE__);
    Serial.print(&#039; &#039;);
    // makro které expanduje čas při kompilaci kódu na &quot;hh:MM:ss&quot; řetězec
    Serial.println(__TIME__);

    Rtc.Begin();

#if defined(WIRE_HAS_TIMEOUT)
    Wire.setWireTimeout(3000 /* us */, true /* reset_on_timeout */);
#endif

    /**
     * @brief Vytvoří objekt RtcDateTime a nastaví ho podle času kompilace kódu.
     *
     */
    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
    printDateTime(compiled);
    Serial.println();

    /**
     * @brief Pokud neni RTC nastaveno nastaví datum a čas.
     *
     */
    if (!Rtc.IsDateTimeValid())
    {
        if (!wasError(&quot;setup IsDateTimeValid&quot;))
        {
            // Common Causes:
            //    1) first time you ran and the device wasn&#039;t running yet
            //    2) the battery on the device is low or even missing

            Serial.println(&quot;RTC lost confidence in the DateTime!&quot;);

            // following line sets the RTC to the date &amp; time this sketch was compiled
            // it will also reset the valid flag internally unless the Rtc device is
            // having an issue

            Rtc.SetDateTime(compiled);
        }
    }

    /**
     * @brief V případě že není RTC spuštěno spustíme ho.
     *
     */
    if (!Rtc.GetIsRunning())
    {
        if (!wasError(&quot;setup GetIsRunning&quot;))
        {
            Serial.println(&quot;RTC was not actively running, starting now&quot;);
            Rtc.SetIsRunning(true);
        }
    }

    /**
     * @brief V případě, že je čas hodin starší než čas kompilace, nastaví se nový čas. Vypíše do sériové konzole informaci o nastavení RTC.
     *
     */
    RtcDateTime now = Rtc.GetDateTime();
    if (!wasError(&quot;setup GetDateTime&quot;))
    {
        if (now &lt; compiled)
        {
            Serial.println(&quot;RTC is older than compile time, updating DateTime&quot;);
            Rtc.SetDateTime(compiled);
        }
        else if (now &gt; compiled)
        {
            Serial.println(&quot;RTC is newer than compile time, this is expected&quot;);
        }
        else if (now == compiled)
        {
            Serial.println(&quot;RTC is the same as compile time, while not expected all is still fine&quot;);
        }
    }

    /*
     * Nastaví RTC modul do požadovaného stavu.
     */
    Rtc.Enable32kHzPin(false);
    wasError(&quot;setup Enable32kHzPin&quot;);
    // The INT/SQW pin on the DS3231 provides either an interrupt signal (due to alarm conditions) or a nice square wave at 1Hz, 4kHz, 8kHz, or 32kHz.
    Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone);
    wasError(&quot;setup SetSquareWavePin&quot;);

    /**
     * @brief Přiřazení naplánované úlohy do plánovače.
     *
     */
    runner.addTask(PrintDateTimeAndTemperatureTask);

    /**
     * @brief Povolení naplánované úlohy.
     *
     */
    PrintDateTimeAndTemperatureTask.enable();
}

void loop()
{
    runner.execute(); // spouštění plánovače
}</code></pre>
<h2>platformio.ini</h2>
<pre><code class="language-ini">[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200

lib_deps =
  makuna/RTC @ ^2.3.6
  arkhipenko/TaskScheduler @ ^3.7.0</code></pre>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2023%2F02%2F28%2Fesp32-rtc-ds3231%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2023/02/28/esp32-rtc-ds3231/">ESP32 RTC DS3231</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ESP32 Bluetooth Server &#8211; Rozšíření</title>
		<link>https://www.hardwired.dev/2023/02/05/esp32-bluetooth-server-2/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Sun, 05 Feb 2023 14:02:16 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[ble]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[platformio]]></category>
		<category><![CDATA[server]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=975</guid>

					<description><![CDATA[<p>Rozšíření článku ESP32 Bluetooth Server. Kód vytváří UART BLE server na ESP32 vývojové desce. Bluetooth server se jde připojit pomocí &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2023/02/05/esp32-bluetooth-server-2/">ESP32 Bluetooth Server – Rozšíření</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Rozšíření článku <a href="https://www.hardwired.dev/esp32-bluetooth-server/">ESP32 Bluetooth Server</a>. Kód vytváří <a href="https://cs.wikipedia.org/wiki/UART">UART</a> <a href="https://cs.wikipedia.org/wiki/Bluetooth">BLE</a> server na <a href="https://www.espressif.com/en/products/socs/esp32">ESP32</a> vývojové desce. Bluetooth server se jde připojit pomocí programu <a href="https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal">Serial Bluetooth Terminal</a> na telefonu se systémem Android, nebo ekvivalentním na iOS.</p>
<p>Bluetooth server reaguje na dva příkazy.</p>
<ul>
<li><code>get</code></li>
<li><code>set &lt;payload&gt;</code></li>
</ul>
<p>Příkazem <code>set</code> se do dočasné paměti ukládá textová hodnota <code>payload</code>. Pokud vše proběhne v pořádku, server vrátí do konzole uloženou zprávu.</p>
<p>Příkazem <code>get</code> získáme ze serveru uloženou zprávu. Po poslání uložené zprávy klientovi se zpráva ze serveru smaže.</p>
<pre><code class="language-cpp">/**
 * @file main.cpp
 * @author Hard Wired
 * @brief Bluetooth server reagující na příkazy.
 * @version 0.1
 * @date 2023-02-01
 * @details Umožňuje připojení telefonu přes Bluetooth terminal aplikaci a
 *          pomocí příkazu &quot;set &lt;text&gt;&quot; uložit textový řetězec do paměti
 *          Bluetooth serveru. Při úspěšném uložení pošle server zprávu
 *          zpět do konzole na telefonu jako potvrzení. Zpráva v takovém
 *          případě zůstává uložena v paměti serveru.
 *
 *          Při opětovném připojení a zadání příkazu &quot;get&quot; server pošle zpět do
 *          Bluetooth konzole na telefonu uloženou zprávu. Tuto zprávu
 *          následně smaže.
 */

#include &lt;Arduino.h&gt;

// Bluetooth knihovny
#include &lt;BLE2902.h&gt;
#include &lt;BLEDevice.h&gt;
#include &lt;BLEServer.h&gt;
#include &lt;BLEUtils.h&gt;

// inicializace modulu z knihovny
BLECharacteristic *pCharacteristic;

const String COMMAND_GET = &quot;get&quot;;
const String COMMAND_SET = &quot;set&quot;;

/**
 * @brief Definuje zda li je klient aktualne pripojeny
 *
 */
bool deviceConnected = false;

/**
 * @brief Flag definující akci odeslat
 *
 */
bool send = false;

/**
 * @brief Flag definující ponechat zprávu uloženou i po odeslání
 *
 */
bool keepMessage = false;

/**
 * @brief Obsahuje zprávu kterou klient pošle serveru
 *
 */
std::string receivedMessage;

/**
 * @brief Zpráva, která se bude odesílat klientovi
 *
 */
String out = &quot;Lorem ipsum&quot;;

#define SERVICE_UUID &quot;6E400001-B5A3-F393-E0A9-E50E24DCCA9E&quot;
#define CHARACTERISTIC_UUID_RX &quot;6E400002-B5A3-F393-E0A9-E50E24DCCA9E&quot;
#define CHARACTERISTIC_UUID_TX &quot;6E400003-B5A3-F393-E0A9-E50E24DCCA9E&quot;

/**
 * @brief Převede std::string na String objekt.
 *
 * @param message
 * @return String
 */
String convertMessageToString(std::string message)
{
    return String(message.c_str());
}

String normalizeMessage(String message)
{
    message.trim();
    message.toLowerCase();

    return message;
}

/**
 * @brief Zpracovává a ukládá zprávu pro odeslání.
 *
 * @param message
 */
void setOutputMessage(String message)
{
    message.trim();

    out = message;
}

/**
 * @brief Maže zprávu pro odeslání
 *
 */
void clearOutputMessage() { out = &quot;&quot;; }

/**
 * @brief Vrací `payload` příkazu typu `[command] &lt;payload&gt;`.
 *
 * @param str
 * @return String
 */
String getCommandPayload(String str, int spacePosition)
{
    return str.substring(spacePosition + 1, str.length());
}

/**
 * @brief Hledá první mezeru v řetězci. Když nenajde, vraci délku řetězce + 1.
 *
 * @param str
 * @return int
 */
int findCommandPositionIndex(String str)
{
    int spacePosition = 0;
    int length = str.length();

    for (int i = 0; i &lt; length; i++)
    {
        spacePosition = i;

        if (str[i] == &#039; &#039;)
        {
            return spacePosition;
        }
    }

    return spacePosition + 1;
}

/**
 * @brief Nastaví odchozí zprávu na základě přijatého příkazu SET.
 *
 * @param message
 */
void commandSet(String payload)
{
    keepMessage = true;
    send = true;

    setOutputMessage(payload);
}

/**
 * @brief Nastavi odeslání zprávy klientovi a její následné smazání.
 *
 */
void commandGet()
{
    keepMessage = false;
    send = true;
}

/**
 * @brief Zpracování příkazu zaslaného klientem.
 *
 * @param message
 */
void processCommand(std::string message)
{
    /*
     * Převedení std::string zprávy na String.
     */
    String stringMessage = convertMessageToString(message);

    /*
     * Odstranění mezer na začátku a konci řetězce. Převedení na malá písmena.
     */
    String normalizedMessage = normalizeMessage(stringMessage);

    /*
     * Vyhledá kde v řetězci končí příkaz. Hledá první mezeru :).
     */
    int commandPositionIndex = findCommandPositionIndex(normalizedMessage);

    String command = normalizedMessage.substring(0, commandPositionIndex);

    if (command == COMMAND_GET)
    {
        commandGet();
    }
    else if (command == COMMAND_SET)
    {
        String payload = getCommandPayload(stringMessage, commandPositionIndex);
        commandSet(payload);
    }
}

/**
 * @brief Odešle zprávu přes Bluetooth.
 *
 */
void sendMessage()
{
    /*
     * Úprava pro výstup do terminálové aplikace.
     */
    String txMessage = out + &quot;\n&quot;;
    int txMessageLength = txMessage.length() + 1;

    char message[txMessageLength];

    txMessage.toCharArray(message, txMessageLength);

    pCharacteristic-&gt;setValue(message);

    pCharacteristic-&gt;notify();
}

/**
 * @brief Vytiskne přijatou zprávu do sériové konzole.
 *
 * @param receivedMessage
 */
void printReceivedMessage(std::string receivedMessage)
{
    Serial.print(&quot;Prijata zprava: &quot;);

    for (int i = 0; i &lt; receivedMessage.length(); i++)
    {
        Serial.print(receivedMessage[i]);
    }

    Serial.println();
}

/**
 * @brief Connect, disconnect callbacks
 *
 */
class MyServerCallbacks : public BLEServerCallbacks
{
    void onConnect(BLEServer *pServer) { deviceConnected = true; };

    void onDisconnect(BLEServer *pServer)
    {
        deviceConnected = false;
        pServer-&gt;getAdvertising()-&gt;start();
    }
};

/**
 * @brief Callback zpracovávající příchozí zprávy
 *
 */
class MyCallbacks : public BLECharacteristicCallbacks
{
    void onWrite(BLECharacteristic *pCharacteristic)
    {
        receivedMessage = pCharacteristic-&gt;getValue();

        if (receivedMessage.length() &gt; 0)
        {
            printReceivedMessage(receivedMessage);
            processCommand(receivedMessage);
        }
    }
};

void setup()
{
    Serial.begin(115200);

    BLEDevice::init(&quot;ESP32 BLE SERVER&quot;);

    BLEServer *pServer = BLEDevice::createServer();
    pServer-&gt;setCallbacks(new MyServerCallbacks());

    BLEService *pService = pServer-&gt;createService(SERVICE_UUID);

    pCharacteristic = pService-&gt;createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
    pCharacteristic-&gt;addDescriptor(new BLE2902());

    BLECharacteristic *pCharacteristic = pService-&gt;createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
    pCharacteristic-&gt;setCallbacks(new MyCallbacks());

    pService-&gt;start();

    pServer-&gt;getAdvertising()-&gt;start();

    Serial.println(&quot;BLE nastaveno, ceka na pripojeni..&quot;);
}

void loop()
{
    if (deviceConnected == true &amp;&amp; out.length() &gt; 0 &amp;&amp; send == true)
    {
        sendMessage();
        delay(100);

        if (keepMessage == false)
        {
            clearOutputMessage();
        }

        send = false;
        keepMessage = false;
    }

    delay(1000);
}</code></pre>
<pre><code class="language-ini">; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200</code></pre>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2023%2F02%2F05%2Fesp32-bluetooth-server-2%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2023/02/05/esp32-bluetooth-server-2/">ESP32 Bluetooth Server – Rozšíření</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
