<?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>android - Hard Wired</title>
	<atom:link href="https://www.hardwired.dev/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hardwired.dev</link>
	<description></description>
	<lastBuildDate>Sat, 16 May 2026 16:59:28 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.hardwired.dev/wp-content/uploads/2022/10/android-chrome-256x256-1-150x150.png</url>
	<title>android - Hard Wired</title>
	<link>https://www.hardwired.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>GrapheneOS, poznatky z užívání</title>
		<link>https://www.hardwired.dev/2026/05/16/grapheneos-poznatky-z-uzivani/</link>
		
		<dc:creator><![CDATA[Kosieh Barter]]></dc:creator>
		<pubDate>Sat, 16 May 2026 11:50:18 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[3D tisk]]></category>
		<category><![CDATA[alternativní operační systémy]]></category>
		<category><![CDATA[Always-On VPN]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[AOSP]]></category>
		<category><![CDATA[bankovní aplikace]]></category>
		<category><![CDATA[bezdrátové nabíjení]]></category>
		<category><![CDATA[DDNS]]></category>
		<category><![CDATA[de-Googled]]></category>
		<category><![CDATA[Desktop Mode]]></category>
		<category><![CDATA[dlouhodobá podpora]]></category>
		<category><![CDATA[dual SIM]]></category>
		<category><![CDATA[e-waste]]></category>
		<category><![CDATA[GaN nabíječka]]></category>
		<category><![CDATA[Garmin Forerunner 255]]></category>
		<category><![CDATA[Garmin Pay]]></category>
		<category><![CDATA[Google Pixel 10 Pro XL]]></category>
		<category><![CDATA[Google Wallet]]></category>
		<category><![CDATA[grapheneos]]></category>
		<category><![CDATA[kyberbezpečnost]]></category>
		<category><![CDATA[lineageos]]></category>
		<category><![CDATA[mobilní telefony]]></category>
		<category><![CDATA[nfc platby]]></category>
		<category><![CDATA[osobní zkušenost]]></category>
		<category><![CDATA[Pixel 10 Pro XL]]></category>
		<category><![CDATA[profily uživatelů]]></category>
		<category><![CDATA[Qi2]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[recenze]]></category>
		<category><![CDATA[sandbox]]></category>
		<category><![CDATA[soukromí]]></category>
		<category><![CDATA[USB-C DisplayPort Alt Mode]]></category>
		<category><![CDATA[WireGuard]]></category>
		<category><![CDATA[Xiaomi Mi 11 Lite 5G]]></category>
		<category><![CDATA[zabezpečení telefonu]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3068</guid>

					<description><![CDATA[<p>Předmluva OS Operační systém, software, na kterém bezi jiný software. Android Operační systém od společnosti Google, Inc. pro chytré telefony. &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/05/16/grapheneos-poznatky-z-uzivani/">GrapheneOS, poznatky z užívání</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h2>Předmluva</h2>
<ul>
<li>OS
<ul>
<li>Operační systém, software, na kterém bezi jiný software.</li>
</ul>
</li>
<li>Android
<ul>
<li>Operační systém od společnosti Google, Inc. pro chytré telefony.</li>
</ul>
</li>
<li>GOS
<ul>
<li>GrapheneOS, zkratka pro tento OS založený na OS Android</li>
</ul>
</li>
<li>LOS
<ul>
<li>LineageOS, zkratka pro tento OS založený na OS Android.</li>
<li>LineageOS je založený na AOSP.</li>
</ul>
</li>
<li>AOSP
<ul>
<li>Android Open Source Project, jedná se o Android, který je &quot;očištěný&quot; od služeb Google a má v sobě pouze licenčně svobodné programy.</li>
</ul>
</li>
<li>Raspberry Pi
<ul>
<li>Raspberry Pi je jednodeskový počítač, zaměřený hlavně pro kutily.</li>
<li>Tento počítač má tzv. GPIO pinout, ke kterému lze připojit čidla a ty poté přímo z OS programovat.</li>
</ul>
</li>
<li>DDNS
<ul>
<li>Dynamic DNS, neboli dynamická domena.</li>
<li>Jedná se o domenu, kterou vam přideli nejaky poskytovatel (třeba freedns.afraid.org), který vam doménu aktualizuje periodicky, což se hodi, kdyz mate dynamickou IP adresu.</li>
</ul>
</li>
<li>Desktop Mode
<ul>
<li>v kontextu OS Android se jedná o funkcionalitu operačního systému, který umožňuje ovládat telefon připojený k počítačovému monitoru (společně s periferiemi jako myš a klávesnice) jako klasicky stolni počítač, byť s jinou filozofií ovládání.</li>
<li>Telefon se tak chová jako klasický stolní počítač, ačkoliv si ponechává své rozhraní pro dodatečnou funkcionalitu.</li>
<li>Jinymi slovy lze říci, že telefon plní funkci stolniho počítače i telefonu zároveň.</li>
<li>Subjektivně si myslim, že budoucnost výpočetní techniky půjde i tímto směrem.</li>
</ul>
</li>
</ul>
<h2>Co předcházelo</h2>
<p>V květnu 2022 jsem se po delší době používání svého tehdejšího telefonu Nokia 5 (Čistý Android) rozhodl k zakoupení nového přístroje, jelikož Nokia přestávala stačit mým potřebam, stejně tak i co se velikosti displeje týče.<br />
Volba tehdy padla na Xiaomi Mi 11 Lite 5G, verze 8G/128G v černé barvě.</p>
<p>Společně s tím jsem pořídil i ochranné prvky, jako je ochranné sklo, pouzdra. Jinymi slovy snaha o to, aby telefon vydržel užívání v dalších letech.</p>
<h3>Nicméně, nebylo to pouze o pozitivech.</h3>
<p>Pomerně rychle jsem si zvykl na nové prostředí, s ním však přišly i věci jinak mě neznámé a kolikrát i &quot;podezřelé&quot;. Jelikož Xiaomi je čínského &quot;návrháře&quot; (rozlišuji zde, že produkt je vyrobený v Číně / ČLR, kdo jej však navrhuje je pro mě subjektivně další entita), byly zde i aplikace, které jsem k dispozici mít nechtěl, místy to bylo i podivné chování OS.</p>
<p>Je pravdou, že krátce po koupi přišla slíbená aktualizace na Android 13, nicméně tím jinak nedůležité aktualizace ze strany výrobce (v tomto případě považuji jak fyzicky výrobce HW, tak i dodavatel OS) ustaly. Vlastně jedinými aktualizacemi - dodám, že pouze akutními, řešícími konkrétní bezpečnostní problém - byly pouze bezpečnostní.</p>
<h3>Příchod Garmin Pay</h3>
<p>Časem jsem se rozhodl si pořídit i chyté hodinky, jelikož jsem v té době rozhodl vyzkoušet si placení právě chytrými hodinkami.</p>
<p>První pokus byl s Xiaomi Watch 2. Paradoxní volba pro tohoto výrobce byla pro &quot;čistý&quot; operační systém s možností Google Wallet/Pay přímo v hodinkách.<br />
Nicméně nepovedlo se mi tohoto docilit, hodinky při pokusu nahlásily chybu a odmítly platební kartu přidat. Původní způsob užití bylo &quot;zpohodlnit&quot; placení (při nástupu do MHD, v obchodě...). Už v té době jsem se snažil najít myšlenku &quot;Jak separovat platby od (relativně permanentně) k datům připojeného telefonu. Dá se říci, že o sledování fyzického pohybu bankovními institucemi jsem tušil, nicméně čím dál více jsem měl potřebu toto oddělit. V této době (duben 2025) mi &quot;stačilo&quot;, kdyz na domácí Wi-Fi jednorázově sesynchronizuji peněženky.</p>
<h4>Ač se mi Xiaomi Watch 2 líbily, vrátil jsem je zpět a rozhodl se jít cestou Garmin Forerunner 255, společně s Garmin Pay.</h4>
<p>Záhy jsem zjistil, že hodinky od Garminu nejenže nabídly styl placení, který jsem hledal, ale také možnost si napsat vlastní program. Garmin jako takový má sice uzavřený systém, nicméně má k němu k dispozici SDK (Software Development Kit, sadu programu na vývoj softwaru pro daný produkt, zjednodušeno), což mi otevřelo cestu časem i k tomu si naprogramovat vlastní &quot;statistiky&quot; k jednomu mému oblíbenému sportu/relaxaci.</p>
<p>Lze tedy říci, že Garmin vyřešil nejen problém v té době pro mě aktuální, ale přidal mi do života i možnost žít aktivněji s možností si to sledovat.</p>
<p>Závěrem, mé současné hodinky mi doporucil člověk jménem Valentino Hesse, čímž mu za doporučení chci poděkovat i formou tohoto textu.</p>
<h3>Nástup VPN</h3>
<p>V pozdějších fázích, asi tak rok před změnou jsem ve zvýšeném měřítku začal užívat domácí VPN. Konkretne jsem na svoji Raspberry Pi 3. generace (verze B) nastavil WireGuard. Jelikož už v té době jsem měl na své DDNS i certifikát přes LetsEncrypt, vlastnictví VPN dávalo smysl, hlavně kvůli bezpečnosti týkající se bankovních aplikací.</p>
<p>S nástupem a nastavením VPN se trochu pojí i nová filozofie užívání telefonu. Na Xiaomi jsem si všiml tzv. &quot;sekundárního prostoru&quot;, přeloženě jde o jiný profil/uživatele na stejném telefonu. Telefon s touto funkcionalitou se chová, jako kdyby byl právě čerstvě nainstalován / zapnut, de facto jde o stejné prostředí. Výhodou tohoto prostředí je možnost mít separované aplikace (takže třeba &quot;normální&quot; profil bez bankovních věcí a &quot;bankovní&quot; profil s bankovními aplikacemi různých bank, aplikace na nákup, popřípadě komunikátory se separovaným účtem).</p>
<p>S tímto se však pojí vyšší nároky na baterii telefonu, jelikož &quot;klasický&quot; Android / LineageOS / AOSP &quot;neumí&quot; ukončit profil, kdyz není potřebný. Znamená to tedy, že profil běží na pozadí i nadále (což není vždy nevýhoda). Nezřídka se stávalo, že i po jedné cestě do obchodu telefon dokázal &quot;propálit&quot; i 20 %. To sice na cestu tam i zpět stačilo, místy bylo však užívání s ohledem na maximální dostupnost náročné, což ne vždy bylo příjemné, zvláště při delších cestách.</p>
<p>Od ledna 2026 jsem začal řešit, čím Xiaomi Mi 11 Lite 5G nahradím.</p>
<h2>Google Pixel 10 Pro XL</h2>
<p>Postupne jsem začal zkoumat specifikace různých telefonu, co by daný přistroj měl umet. V zasade jsem měl tyto požadavky:</p>
<ul>
<li>Profiling (rozšířená forma &quot;sekundárního prostoru&quot; od Xiaomi, alespoň 2 profily), ideálně s možností daný profil ukončit,</li>
<li>Always-On VPN (čili zablokování veškerého provozu, není-li VPN aktivní)</li>
<li>Dual-SIM (historicky mám více SIM karet, které i do dnešního dne udržuji v &quot;provozu&quot;)</li>
<li>větší display (hodně dobré zkušenosti u Xiaomi Mi 11 Lite, který měl velký display)</li>
<li>Na základě zkušeností u Xiaomi i dlouhodobá podpora výrobce/dodavatele OS.</li>
</ul>
<h4>Volbou po cca 4 měsících, rešeršovaného výzkumu i za pomocí jazykových modelů (Gemini, ChatGPT) v několika instancich (tímto mám na mysli opakované využití AI &quot;Jaký telefon? Zde jsou mé požadavky&quot;), tak i dotazování různých diskusních fór jsem dospěl ke konečnému závěru, kterým se stal Google Pixel 10. generace, verze Pro, velikost XL. Formalním jménem &quot;Google Pixel 10 Pro XL 16/256 GB&quot;.</h4>
<p>Telefon jsem se rozhodl po delším váhání objednat a jelikož jsem v té době měl i členství v jednom větším internetovém obchodě, definitivně jsem se rozhodl pro koupi, konkretně zelené verze &quot;Jade&quot;, která mi &quot;zapadala do korporatního stylu&quot;.</p>
<p>Lze říci, že další den mi byl telefon doručen a já se tak mohl začít radovat z nového stroje. Samozřejmě, pro maximalni ochranu nového stroje jsem i jako v případě Xiaomi Mi 11 Lite přiobjednal ochranné prvky.</p>
<h2>GrapheneOS</h2>
<p>Zjednoduším-li to, Pixel jsem si neobjednal pouze jako náhradu, ale i jako cilený důvod. Už asi 2 měsíce před koupí jsem měl povedomí o operačním systému &quot;GrapheneOS&quot;, který oproti standardnímu Androidu nabízel i od základu přeimplementovanou funkcionalitu týkající se bezpečnosti a soukromí.</p>
<p>I to byla součást mého předchozího rešeršovaného vyhledavání, který OS chci použít. Ano, jinymi kandidaty byla i Motorola, nicméně některé funkce jako GrapheneOS nenabízela a byť s autory GrapheneOS uzavřela partnerství na oficiálního dodavatele hardware (tím rozumím telefony), první přístroje od Motoroly mající jako OS GrapheneOS nebudou k dispozici dříve, než v roce 2027.</p>
<h2>Funkcionalita společná a rozdilná</h2>
<p>Jednou z motivaci pro nový telefon byla i funkcionalita tzv. &quot;Desktop Mode&quot;, která se předchozích verzích Androidu objevovala pouze od výrobce Samsung, tzv. &quot;DeX&quot;. Jiná varianta - která hovořila i v prospěch dříve zmíněné Motoroly - byl &quot;Smart Connect&quot;, nicméně důvodem pro Pixel (a později i GrapheneOS) byly aktualizace operačního systému samotného.</p>
<h3>&quot;Zakladní&quot; Android</h3>
<h4>Desktop Mode</h4>
<p>Základní Android - záleží zde i na hardwaru telefonu - funkcionalitu Desktop Mode umí. Předchůdcem jím bylo USB OTG (USB On-The-Go), což je možnost připojit USB flash do telefonu a zacházet s ním podobným stylem, jako kdyby šlo o počítač, stejně tak ovladaní přes klávesnici a myš.<br />
Desktop Mode přidává DisplayPort Alt Mode přes USB-C, která vyjma datového/ovladacího přenosu přenáší i obrazové data možné zobrazit právě na externím monitoru. Je to umožněné tzv. propustností rozhranní, v tomto případě USB-C.</p>
<h4>Aktualizce</h4>
<p>Ač společnost Google má snahu o snižovaní tzv. e-waste (elektronický odpad), ne každý výrobce je tomu nakloneň. Ano, stále jde o výdělek, nicméně funguje-li telefon i po své moralní zastaralosti, výrobce zpravidla nechce poskytovat opravy jinak starým strojům.</p>
<p>Řada Pixel od Google má v tomto případě jinou filozofii, jelikož jde o &quot;vlajkové lodě&quot; pro Android, filozofie aktualizaci je zde jiná a mnohem otevřenější k tomu udržet stroj v aktuálním stavu, jelikož hardware je poměrně schopný.</p>
<h3>Rozdíl GrapheneOS oproti &quot;základu&quot;</h3>
<p>Co se GrapheneOS týče, většína funkcí je v tomto systému oproti zakladnímu OS Android zachována, nicméně GrapheneOS má zaměření hlavně na bezpecnost.<br />
Velkým rozdilem je zde nejen Always-On VPN (formalně dostupná již od verze Androidu 7/8), nicméně společně s profilovaním (které oproti zakladu má funkci cíleného vypnutí) je možnost zablokovat veškerý síťový provoz, neběží-li VPN na pozadí.</p>
<p>Toto je především zajímavé, má-li uživatel domácí VPN.</p>
<p>Základní Android nabízí aplikacím tzv. &quot;pískoviště&quot;, nicméně v GrapheneOS je této funckionalitě věnována mnohem větší pozornost po stránce zabezpečení a soukromí. Lze i v určitých ohledech aplikaci dovolit, kam bude moci pristupovat (což je hodně zajimavé u některých aplikací typu Messenger od Meta, stejně tak WhatsApp).</p>
<p>Dále je hodně zajimavé - především s užitím vypínatelného profilu - právě pro bankovní aplikace, kdy nejenže dovolíte této aplikací běžet explicitně pouze tehdy, kdy je potřeba, ale také donutíte její provoz jít třeba přes vaši domácí síť. Lze tak říci, že telefon máte elektronicky stále připojený přes síťový prvek, kterému důvěřujete (což o &quot;datech&quot; - datovému připojení přímo z telefonu platí dvojnásob).</p>
<p>Jinou variantou jsou i aplikace, které chcete mít &quot;zamknuté&quot; za specialním heslem a dostupné pouze a pouze majiteli přístroje.</p>
<h3>Post Scriptum ke GrapheneOS</h3>
<p>Mám-li v krátkosti udělat výtah, lze říci, že GrapheneOS jsem na svůj Pixel 10 Pro XL nainstaloval v podstatě hned druhý den po přijetí telefonu. Možnost vyzkoušet si zakladní OS přímo od Google jsem zde moc nevyužil, jelikož i přes vlastnictví nového telefonu (a s tím spojenym &quot;WOW&quot; efektem) jsem měl jasný záměr.</p>
<p>Nicméně musím dodat, že byl by nějaký závažnější problém s GrapheneOS, příručka, respektive postup pro instalaci &quot;sériového&quot; Androidu je velmi jednoduchá. V zásadě stačí upravený webový prohlížeč, USB kabel do počítače a trocha času. Je to tedy změna lehce zvrátitelná a dívám se tedy na GrapheneOS s &quot;mentalitou&quot; &quot;Lze to vrátit, bude-li třeba&quot;.</p>
<h2>Vedlejší efekt na předchozím telefonu</h2>
<p>Ač jsem zmínil, že Pixel 10 Pro XL s GrapheneOS se stal hlavním &quot;tažným koněm&quot; mobilního života, otevřelo mi to možnost si &quot;hrát&quot; do té doby s &quot;produkčním&quot; telefonem od Xiaomi.</p>
<p>Měl jsem povědomí, že telefony od Xiaomi - nachází-li se na uzemí Evropské Unie - lze tzv. odemknout a nainstalovat jiný operační systém, v mem případě LineageOS / LOS. Je to forma AOSP, která v sobě nemá predinstalované aplikace od spolecnosti Google a i daného výrobce/návrháře. Jedná se tak o &quot;De-Googled&quot; software, místy i &quot;de-bloated&quot; systém.</p>
<p>Učinil jsem tak a telefon jsem začal užívat jako &quot;záložní&quot;. Ač LineageOS podporu pro vypínání profilů nemá, Always-On VPN funkcionalita je zde také přitomna a lze ji užít podobným způsobem, jako na GrapheneOS.</p>
<p>Kdyz zmíním paradox, že Xiaomi Mi 11 Lite 5G po instalaci LineageOS &quot;ožilo&quot;, nebudu daleko od pravdy. Pominu-li některé funkcionality řešitelné externě, telefon je plně funkční a stačilo by jej prodat s poznamkou &quot;Toto nefunguje, je to záměr nikoliv můj, ale dodavatele systému&quot;.</p>
<h2>Přislušenství k telefonum přidané</h2>
<p>V kratkosti zde zminím i &quot;obnovu&quot; přislušenství pro oba přístroje. Puvodní, originální nabijecí adaptér pro Xiaomi postupně ztrácel na výkonu, rozhodl jsem se tedy - i s ohledem na pracovní Samsung Galaxy S25 - vyzkoušet si bezdrátové nabíjení, které jsem doteď neměl možnost využít.</p>
<p>Postupne volba padla na nejen GaN nabíjecí adaptér (vzhledem k dobrým referencím jsem užil &quot;AlzaPower Ultímate X500 67W&quot;), tak nabíjecí &quot;puk&quot; &quot;AlzaPower WQT110&quot; s podporou Qi2.</p>
<p>Jelikož jsem 3Dtiskař a 3Dmodelář, návrh a 3Dtisk stojánku přímo pro tento puk (zohledňuící proporce i slabší &quot;MagSafe&quot; u Samsungu Galaxy S25) byl logickym krokem.</p>
<h2>Paradox s ohledem na bezpečnost aktualizovaného OS Android</h2>
<p>Dostavám se tímto do poslední kapitoly, kde budu řešit a pokládat otázky, na které nejspíše nedostanu odpovědi.<br />
Jakožto člověk IT-znalý (pro kontext, pracuji jako automation engineer, server administrator a on-call ve větší IT firmě) vnímám paradox, kdy výrobcem dodaný software má &quot;certifikaci&quot; pro určité funkce - v tomto případě třeba Google Wallet. Funkcionalitu Tap-n-Pay zde musím nahrazovat právě Garmin Pay.</p>
<p>Lze se na to i dívat z jiného úhlu pohledu, kdy platba hodinkami je paradoxně bezpečnější (NFC čip v hodinkách je jinak vypnut, zapíná se pouze, když uživatel funkci pro placení explicitně zapne v daný okamžik).</p>
<p>To platí jak pro GrapheneOS, tak pro LineageOS.</p>
<p>Telefony, obecně systémy (jak Android, tak i Debian, Arch Linux) se snažím držet v aktualním stavu a nezřídka si sám zajišťuji i aktualizace / opravy.</p>
<p>Otázka - kterou si kladu - je &quot;Proc je alternativní systém jinak pravidelně aktualizovaný méně bezpečný, než zastaralý systém dodaný výrobcem, který nemá dalšího důvodu se o daný přistroj / hardware starat?&quot;</p>
<p>Narážím tak na paradox, kdy i pravidelně aktualizovaný - ale necertifikovaný - software je bezpečnější, než jinak &quot;certifikovaný&quot; software od výrobce, který se rozhodl od určitého data aktualizace nedodavat. Pokud telefon nadále funguje, proč jeho funkcionalitu ořezávat, když by to samé mohl zvládat i dalších - dejme tomu - 5 let a tím tak ještě více &quot;rozprostřít&quot; náklady na iniciální pořízení?</p>
<h2>Závěrem</h2>
<p>GrapheneOS byl cílem snažení nejen o na to najít soukromí ve světě stále více a více připomínající 1984, ale také i tom, že jinak morálně zastaralé přístroje mají i nadále svůj důvod existovat.</p>
<p>Mým pohledem GrapheneOS - byť s určitými nedostatky, které jsem akceptoval - plní přesně to, co jsem od něj očekával, tedy nabídnout alespoň soukromí ve světě, kdy je každý krok monitorován.</p>
<p>Jako přidaným benefitem i nabídnout funkcionalitu, která by v roce rozmachu informačních technologií na začátku 21. stoleti mohla působit jako sci-fi - mít skoro plnohodnotný počítač ne v batohu, ale přímo v kapse.</p>
<h2>Galerie</h2>
<p>| Nabíjecí stojánek pro Qi2 wireless | &quot;Dockovací&quot; stanice s užitím 3Dtisku  |<br />
| <a href="https://www.hardwired.dev/wp-content/uploads/2026/05/pixel_stand-169x300.avif"><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2026/05/pixel_stand-169x300.avif" alt="Pixel 10 Pro XL on wireless charger stand." /></a> | <a href="https://www.hardwired.dev/wp-content/uploads/2026/05/Screenshot_20260516_133023-171x300.avif"><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2026/05/Screenshot_20260516_133023-171x300.avif" alt="Pixel 10 Pro XL on Alza USB-C dock adapter in Desktop Mode configuration." /></a> |</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F05%2F16%2Fgrapheneos-poznatky-z-uzivani%2F&#038;hashtags=grapheneos%2Clineageos%2Candroid%2Chacking%2C3dprinting&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/05/16/grapheneos-poznatky-z-uzivani/">GrapheneOS, poznatky z užívání</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Android Debug Bridge (ADB)</title>
		<link>https://www.hardwired.dev/2025/11/14/android-debug-bridge-adb/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Fri, 14 Nov 2025 05:50:00 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Různé]]></category>
		<category><![CDATA[ADB Commands]]></category>
		<category><![CDATA[ADB Tips]]></category>
		<category><![CDATA[Advanced Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Android Debug Bridge]]></category>
		<category><![CDATA[Android Development]]></category>
		<category><![CDATA[Android Device Management]]></category>
		<category><![CDATA[Android SDK]]></category>
		<category><![CDATA[Batch Skripty]]></category>
		<category><![CDATA[Command Line]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[File Management]]></category>
		<category><![CDATA[Instalace aplikací]]></category>
		<category><![CDATA[Logování]]></category>
		<category><![CDATA[Meta Quest 3]]></category>
		<category><![CDATA[Platform Tools]]></category>
		<category><![CDATA[Power Users]]></category>
		<category><![CDATA[Příkazy ADB]]></category>
		<category><![CDATA[Správa souborů]]></category>
		<category><![CDATA[Troubleshoooting]]></category>
		<category><![CDATA[USB Debugging]]></category>
		<category><![CDATA[VR Content]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2873</guid>

					<description><![CDATA[<p>Android Debug Bridge (ADB) Android Debug Bridge (ADB) je mocný nástroj pro komunikaci s Android zařízeními, který každý pokročilý uživatel &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2025/11/14/android-debug-bridge-adb/">Android Debug Bridge (ADB)</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>Android Debug Bridge (ADB)</h1>
<p>Android Debug Bridge (ADB) je mocný nástroj pro komunikaci s Android zařízeními, který každý pokročilý uživatel a vývojář by měl znát. V tomto článku si ukážeme praktické využití ADB na příkladu správy souborů v Meta Quest 3, ale principy platí pro všechna Android zařízení.</p>
<h2>Co je ADB?</h2>
<p>ADB je command-line nástroj, který umožňuje komunikaci mezi počítačem a Android zařízením přes USB nebo Wi-Fi. Původně byl vyvinut pro vývojáře, ale jeho využití sahá daleko za hranice programování.</p>
<h3>Klíčové vlastnosti:</h3>
<ul>
<li><strong>Přenos souborů</strong> mezi počítačem a zařízením</li>
<li><strong>Vzdálené spouštění příkazů</strong> na Android systému</li>
<li><strong>Instalace a správa aplikací</strong></li>
<li><strong>Debugging a logování</strong></li>
<li><strong>Systémové úpravy</strong> bez nutnosti rootování</li>
</ul>
<h2>Instalace a nastavení</h2>
<h3>macOS/Linux:</h3>
<pre><code class="language-bash"># Homebrew (macOS)
brew install android-platform-tools

# Ubuntu/Debian
sudo apt install android-tools-adb</code></pre>
<h3>Windows:</h3>
<p>Stáhněte Android SDK Platform Tools z oficiálních stránek Google.</p>
<h2>Základní příkazy</h2>
<h3>Připojení a správa zařízení</h3>
<pre><code class="language-bash"># Zobrazení připojených zařízení
adb devices

# Restart ADB serveru (při problémech s připojením)
adb kill-server &amp;&amp; adb start-server</code></pre>
<p><strong>Výstup:</strong></p>
<pre><code>List of devices attached
2G0YC5ZGCZ01G4    device</code></pre>
<h3>Přenos souborů</h3>
<pre><code class="language-bash"># Upload souboru do zařízení
adb push &quot;local_file.mp4&quot; /sdcard/Movies/

# Download souboru ze zařízení
adb pull /sdcard/Movies/video.mp4 ./

# Upload celé složky
adb push ./folder/ /sdcard/destination/</code></pre>
<h3>Správa souborů na zařízení</h3>
<pre><code class="language-bash"># Zobrazení obsahu složky
adb shell ls -la /sdcard/

# Vytvoření složky
adb shell mkdir /sdcard/NewFolder

# Smazání souboru
adb shell rm &quot;/sdcard/Movies/video.mp4&quot;

# Smazání složky
adb shell rm -rf /sdcard/OldFolder</code></pre>
<h2>Pokročilé techniky</h2>
<h3>Práce se soubory s mezerami v názvu</h3>
<p>Při práci se soubory obsahujícími mezery je nutné používat správné uvozovky:</p>
<pre><code class="language-bash"># Správně - s uvozovkami
adb shell &quot;rm &#039;/sdcard/Movies/Wonder Woman 1984.mp4&#039;&quot;

# Špatně - bez uvozovek (způsobí chybu)
adb shell rm /sdcard/Movies/Wonder Woman 1984.mp4</code></pre>
<h3>Batch operace</h3>
<p>Pro hromadné operace můžete vytvořit bash skripty:</p>
<pre><code class="language-bash">#!/bin/bash
files=(
    &quot;video1.mp4&quot;
    &quot;video2.mkv&quot;
    &quot;video3.avi&quot;
)

for file in &quot;${files[@]}&quot;; do
    echo &quot;Uploading: $file&quot;
    adb push &quot;$file&quot; /sdcard/Movies/
    if [ $? -eq 0 ]; then
        echo &quot;✓ Success: $file&quot;
    else
        echo &quot;✗ Failed: $file&quot;
    fi
done</code></pre>
<h2>Řešení běžných problémů</h2>
<h3>Unauthorized zařízení</h3>
<p><strong>Problém:</strong> <code>adb devices</code> zobrazuje <code>unauthorized</code></p>
<p><strong>Řešení:</strong></p>
<ol>
<li>Zkontrolujte USB debugging v Developer Options</li>
<li>Potvrďte RSA klíč v zařízení</li>
<li>Restartujte ADB server:
<pre><code class="language-bash">adb kill-server &amp;&amp; adb start-server</code></pre>
</li>
</ol>
<h3>Resetování autorizačních klíčů</h3>
<pre><code class="language-bash"># Smazání starých klíčů a vygenerování nových
rm -f ~/.android/adbkey ~/.android/adbkey.pub
adb kill-server &amp;&amp; adb start-server</code></pre>
<h2>Praktické příklady z reálného použití</h2>
<h3>Správa VR obsahu v Meta Quest 3</h3>
<pre><code class="language-bash"># Zobrazení dostupného místa
adb shell df -h /sdcard

# Přenos velkých VR videí
adb push &quot;8K_VR_Video.mp4&quot; /sdcard/Movies/

# Kontrola průběhu přenosu (v jiném terminálu)
adb shell du -sh /sdcard/Movies/</code></pre>
<h3>Zálohování herních dat</h3>
<pre><code class="language-bash"># Zálohování složky s herními daty
adb pull /sdcard/Android/data/com.game.package ./backup/

# Obnovení ze zálohy
adb push ./backup/com.game.package /sdcard/Android/data/</code></pre>
<h2>Optimalizace výkonu</h2>
<h3>Rychlost přenosu</h3>
<p>Rychlost přenosu závisí na několika faktorech:</p>
<ul>
<li><strong>USB kabel</strong> - používejte kvalitní USB 3.0+ kabely</li>
<li><strong>USB port</strong> - preferujte USB 3.0+ porty</li>
<li><strong>Velikost souborů</strong> - větší soubory = vyšší efektivita</li>
</ul>
<p><strong>Typické rychlosti:</strong></p>
<ul>
<li>USB 2.0: ~20-25 MB/s</li>
<li>USB 3.0: ~35-45 MB/s</li>
</ul>
<h3>Monitoring přenosu</h3>
<pre><code class="language-bash"># Zobrazení detailního průběhu
adb push -v &quot;large_file.mp4&quot; /sdcard/Movies/

# Kontrola volného místa před přenosem
adb shell &quot;df -h /sdcard | grep sdcard&quot;</code></pre>
<h2>Bezpečnostní aspekty</h2>
<h3>USB Debugging</h3>
<ul>
<li>Aktivujte pouze při potřebě</li>
<li>Používejte &quot;Always allow from this computer&quot; pouze u důvěryhodných počítačů</li>
<li>Pravidelně kontrolujte autorizované počítače v Developer Options</li>
</ul>
<h3>Síťové připojení</h3>
<pre><code class="language-bash"># ADB přes Wi-Fi (vyžaduje USB aktivaci)
adb tcpip 5555
adb connect 192.168.1.100:5555</code></pre>
<h2>Závěr</h2>
<p>ADB je nepostradatelný nástroj pro každého, kdo chce využít plný potenciál Android zařízení. Ať už spravujete soubory v Meta Quest 3, vyvíjíte aplikace, nebo jen chcete mít větší kontrolu nad svým zařízením, ADB vám poskytne potřebnou flexibilitu a sílu.</p>
<p><strong>Klíčové takeaways:</strong></p>
<ul>
<li>ADB funguje se všemi Android zařízeními</li>
<li>Správné uvozování je kritické pro soubory s mezerami</li>
<li>Batch skripty šetří čas při hromadných operacích</li>
<li>Bezpečnost by měla být vždy prioritou</li>
</ul>
<h2>Pokročilé příkazy pro power users</h2>
<h3>Systémové informace</h3>
<pre><code class="language-bash"># Informace o zařízení
adb shell getprop ro.product.model
adb shell getprop ro.build.version.release

# Stav baterie
adb shell dumpsys battery

# Využití úložiště
adb shell df -h

# Spuštěné procesy
adb shell ps | grep com.oculus</code></pre>
<h3>Správa aplikací</h3>
<pre><code class="language-bash"># Seznam nainstalovaných aplikací
adb shell pm list packages

# Instalace APK
adb install app.apk

# Odinstalace aplikace
adb uninstall com.package.name

# Vymazání dat aplikace
adb shell pm clear com.package.name</code></pre>
<h3>Logování a debugging</h3>
<pre><code class="language-bash"># Zobrazení logů v reálném čase
adb logcat

# Filtrování logů podle tagu
adb logcat -s &quot;MyApp&quot;

# Uložení logů do souboru
adb logcat &gt; device_logs.txt</code></pre>
<h2>Automatizace s skripty</h2>
<h3>Bash skript pro hromadné stahování</h3>
<pre><code class="language-bash">#!/bin/bash
# download_vr_content.sh

DEST_DIR=&quot;/Volumes/ExternalDrive/VR/&quot;
QUEST_DIR=&quot;/sdcard/Movies/&quot;

# Vytvoření cílové složky
mkdir -p &quot;$DEST_DIR&quot;

# Získání seznamu souborů
echo &quot;Scanning Quest for video files...&quot;
adb shell &quot;find $QUEST_DIR -name &#039;*.mp4&#039; -o -name &#039;*.mkv&#039;&quot; | while read file; do
    filename=$(basename &quot;$file&quot;)
    echo &quot;Downloading: $filename&quot;

    # Stažení s progress barem
    adb pull &quot;$file&quot; &quot;$DEST_DIR&quot;

    if [ $? -eq 0 ]; then
        echo &quot;✓ Downloaded: $filename&quot;
        # Volitelně smazat ze zařízení po úspěšném stažení
        # adb shell &quot;rm &#039;$file&#039;&quot;
    else
        echo &quot;✗ Failed: $filename&quot;
    fi
done

echo &quot;Download complete!&quot;</code></pre>
<h3>Python skript pro monitoring</h3>
<pre><code class="language-python">#!/usr/bin/env python3
import subprocess
import json
import time

def get_device_info():
    &quot;&quot;&quot;Získání informací o připojeném zařízení&quot;&quot;&quot;
    try:
        result = subprocess.run([&#039;adb&#039;, &#039;devices&#039;],
                              capture_output=True, text=True)
        return result.stdout
    except Exception as e:
        return f&quot;Error: {e}&quot;

def get_storage_info():
    &quot;&quot;&quot;Kontrola dostupného místa&quot;&quot;&quot;
    try:
        result = subprocess.run([&#039;adb&#039;, &#039;shell&#039;, &#039;df&#039;, &#039;-h&#039;, &#039;/sdcard&#039;],
                              capture_output=True, text=True)
        return result.stdout
    except Exception as e:
        return f&quot;Error: {e}&quot;

def monitor_transfer(file_path):
    &quot;&quot;&quot;Monitoring průběhu přenosu&quot;&quot;&quot;
    print(f&quot;Monitoring transfer of: {file_path}&quot;)

    while True:
        try:
            result = subprocess.run([&#039;adb&#039;, &#039;shell&#039;, &#039;ls&#039;, &#039;-la&#039;, file_path],
                                  capture_output=True, text=True)
            if result.returncode == 0:
                print(f&quot;Transfer in progress... {time.strftime(&#039;%H:%M:%S&#039;)}&quot;)
            else:
                print(&quot;Transfer completed or file not found&quot;)
                break
        except KeyboardInterrupt:
            print(&quot;\nMonitoring stopped&quot;)
            break

        time.sleep(5)

if __name__ == &quot;__main__&quot;:
    print(&quot;ADB Device Monitor&quot;)
    print(&quot;=&quot; * 30)
    print(get_device_info())
    print(get_storage_info())</code></pre>
<h2>Troubleshooting guide</h2>
<h3>Časté chyby a jejich řešení</h3>
<table>
<thead>
<tr>
<th>Chyba</th>
<th>Příčina</th>
<th>Řešení</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>device unauthorized</code></td>
<td>Nepotvrzený RSA klíč</td>
<td>Potvrdit v zařízení, restartovat ADB</td>
</tr>
<tr>
<td><code>no devices found</code></td>
<td>USB debugging vypnutý</td>
<td>Aktivovat Developer Options</td>
</tr>
<tr>
<td><code>insufficient permissions</code></td>
<td>Chybějící oprávnění</td>
<td>Zkontrolovat USB debugging, změnit USB režim</td>
</tr>
<tr>
<td><code>protocol fault</code></td>
<td>Poškozený USB kabel</td>
<td>Vyměnit kabel, zkusit jiný port</td>
</tr>
</tbody>
</table>
<h3>Debug příkazy</h3>
<pre><code class="language-bash"># Kontrola ADB verze
adb version

# Verbose výstup pro debugging
adb -v devices

# Restart s debug informacemi
adb kill-server
ADB_TRACE=all adb start-server</code></pre>
<h2>Best practices</h2>
<h3>1. Organizace souborů</h3>
<pre><code class="language-bash"># Vytvořte strukturu složek
adb shell mkdir -p /sdcard/Media/{Movies,VR,Games}
adb shell mkdir -p /sdcard/Backups/{Apps,Data}</code></pre>
<h3>2. Pravidelné zálohování</h3>
<pre><code class="language-bash"># Automatické zálohování důležitých dat
adb pull /sdcard/Android/data/important.app ./backups/$(date +%Y%m%d)/</code></pre>
<h3>3. Monitoring výkonu</h3>
<pre><code class="language-bash"># Sledování využití CPU a paměti
adb shell top -n 1
adb shell cat /proc/meminfo</code></pre>
<h2>Integrace s dalšími nástroji</h2>
<h3>Použití s Git</h3>
<pre><code class="language-bash"># Automatické commitování záloh
git add backups/
git commit -m &quot;ADB backup $(date)&quot;</code></pre>
<h3>Kombinace s rsync</h3>
<pre><code class="language-bash"># Synchronizace s lokálním úložištěm
adb pull /sdcard/DCIM/ ./photos/
rsync -av ./photos/ /backup/quest-photos/</code></pre>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2025%2F11%2F14%2Fandroid-debug-bridge-adb%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/11/14/android-debug-bridge-adb/">Android Debug Bridge (ADB)</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bezpečnostní rizika Bluetooth</title>
		<link>https://www.hardwired.dev/2025/07/20/bezpecnostni-rizika-bluetooth/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sun, 20 Jul 2025 15:11:28 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[aktualizace systému]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[bezdrátová komunikace]]></category>
		<category><![CDATA[bezpečnost]]></category>
		<category><![CDATA[BlueBorne]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[Bluetooth attacks]]></category>
		<category><![CDATA[BrakTooth]]></category>
		<category><![CDATA[chytrá zařízení]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[data protection]]></category>
		<category><![CDATA[digital hygiene]]></category>
		<category><![CDATA[digitální hygiena]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[kybernetická bezpečnost]]></category>
		<category><![CDATA[ochrana dat]]></category>
		<category><![CDATA[phone security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[smart devices]]></category>
		<category><![CDATA[system updates]]></category>
		<category><![CDATA[útoky přes Bluetooth]]></category>
		<category><![CDATA[vulnerabilities]]></category>
		<category><![CDATA[wireless communication]]></category>
		<category><![CDATA[zabezpečení telefonu]]></category>
		<category><![CDATA[zero-click attacks]]></category>
		<category><![CDATA[zero-click útoky]]></category>
		<category><![CDATA[zranitelnosti]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2784</guid>

					<description><![CDATA[<p>Bluetooth bezpečnostní rizika: Jak se chránit před skrytými hrozbami Bluetooth se stal součástí našeho každodenního života – od připojení sluchátek &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2025/07/20/bezpecnostni-rizika-bluetooth/">Bezpečnostní rizika Bluetooth</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>Bluetooth bezpečnostní rizika: Jak se chránit před skrytými hrozbami</h1>
<p><strong>Bluetooth se stal součástí našeho každodenního života – od připojení sluchátek po synchronizaci chytrých hodinek. Tato neviditelná technologie však skrývá vážná bezpečnostní rizika, která mohou ohrožovat naše osobní data i soukromí.</strong></p>
<h2>Skrytá hrozba v kapse</h2>
<p>Bluetooth technologie dnes běží na miliardách zařízení po celém světě. Její všudypřítomnost a schopnost navazovat spojení na dálku z ní však činí atraktivní cíl pro útočníky. Na rozdíl od tradičních kybernetických útoků, které vyžadují aktivní účast uživatele, mohou Bluetooth exploity zasáhnout bez jakékoliv interakce ze strany oběti.</p>
<p>Bezpečnostní experti varují, že i zdánlivě neškodné zapnutí Bluetooth může vystavit zařízení útoku. Stačí být ve špatnou chvíli na špatném místě – například v kavárně, na letišti nebo na zastávce.</p>
<h2>BlueBorne a BrakTooth: Reálné hrozby současnosti</h2>
<p>Mezi nejznámější Bluetooth exploity patří <strong>BlueBorne</strong>, poprvé detailně popsaný v roce 2017 výzkumníky ze společnosti Armis Labs. Tento typ útoku umožňuje útočníkovi získat přístup k zařízení přes aktivní Bluetooth bez nutnosti párování nebo jakékoliv akce uživatele.</p>
<p>BlueBorne původně ohrožoval přes 8,2 miliardy Bluetooth zařízení na platformách Android, iOS, Linux i Windows. Ačkoliv byl v mnoha systémech opraven, princip útoku zůstává aktuální i v roce 2025.</p>
<p>Novějším příkladem je <strong>BrakTooth</strong> – skupina zranitelností zveřejněná v roce 2021, která dokázala způsobit vše od odmítnutí služby až po vzdálené spuštění kódu na cílových zařízeních.</p>
<h2>Jak útoky fungují</h2>
<p>Problém nespočívá v konkrétních aplikacích, ale v samotném Bluetooth stacku – způsobu, jak zařízení spravují bezdrátové spojení. Pokud obsahuje bezpečnostní díru, může útočník pomocí speciálně upraveného signálu:</p>
<ul>
<li>Získat neautorizovaný přístup do systému</li>
<li>Spustit škodlivý kód</li>
<li>Proniknout na další zařízení v okolí</li>
<li>Ukrást citlivá data</li>
</ul>
<p>Dosah útoku je omezen pouze dosahem Bluetooth signálu – typicky 10 až 30 metrů.</p>
<h2>Proč jste stále v ohrožení</h2>
<p><strong>Trvalá připravenost</strong>: Většina uživatelů má Bluetooth zapnutý 24/7 kvůli připojeným sluchátkům, chytrým hodinkám nebo dalším gadgetům. Tato permanentní dostupnost poskytuje útočníkům neustálou příležitost.</p>
<p><strong>Zastaralé systémy</strong>: Miliony zařízení v Česku stále běží na starších verzích Androidu (verze 8 a nižší) nebo používají levnější hardware s neaktualizovaným Bluetooth softwarem.</p>
<p><strong>Zero-click útoky</strong>: Vývoj směřuje k útokům, které nevyžadují žádnou interakci uživatele – Bluetooth je pro tyto techniky ideálním nosičem.</p>
<h2>Praktická ochrana</h2>
<p>Efektivní ochrana proti Bluetooth útokům nevyžaduje technické znalosti, ale důslednost:</p>
<p><strong>Vypínejte Bluetooth, když ho nepotřebujete</strong> – zejména v noci a na veřejných místech. Znemožníte tím útočníkům vyhledávat vaše zařízení.</p>
<p><strong>Udržujte systém aktuální</strong> – bezpečnostní záplaty jako ty pro BlueBorne jsou účinné pouze u aktualizovaných zařízení.</p>
<p><strong>Omezte viditelnost</strong> – zkontrolujte nastavení, aby vaše zařízení nebylo trvale viditelné pro ostatní.</p>
<p><strong>Kontrolujte oprávnění aplikací</strong> – nepovolujte přístup k Bluetooth aplikacím, které ho skutečně nepotřebují.</p>
<p><strong>Buďte opatrní při párování</strong> – nepřipojujte se k neznámým zařízením, která mohou napodobovat legitimní hardware.</p>
<p><strong>Používejte Bluetooth selektivně</strong> – zvažte jeho použití pouze doma nebo v autě, nikoliv na veřejnosti.</p>
<h2>Závěr</h2>
<p>Bluetooth není nutné se bát, ale stejně jako u Wi-Fi nebo hesel platí základní pravidlo: bezpečnost začíná u správného nastavení a rozumného používání. S rostoucím počtem připojených zařízení a vývojem nových útočných technik se preventivní opatření stávají klíčovými pro ochranu našich digitálních životů.</p>
<p>Jednoduché změny v chování a nastavení mohou dramaticky snížit riziko a zajistit, že Bluetooth zůstane užitečným nástrojem, nikoliv bezpečnostní hrozbou.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2025%2F07%2F20%2Fbezpecnostni-rizika-bluetooth%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/bezpecnostni-rizika-bluetooth/">Bezpečnostní rizika Bluetooth</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Nulování počítadla kartáčkové hlavice Philips SoniCare</title>
		<link>https://www.hardwired.dev/2025/02/02/nulovani-pocitadla-kartackove-hlavice-philips-sonicare/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Sun, 02 Feb 2025 07:37:27 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[kartáčková hlavice]]></category>
		<category><![CDATA[návod]]></category>
		<category><![CDATA[NFC čip]]></category>
		<category><![CDATA[NFC Tools]]></category>
		<category><![CDATA[nulování počítadla]]></category>
		<category><![CDATA[Philips Sonicare]]></category>
		<category><![CDATA[reset]]></category>
		<category><![CDATA[reverzní inženýrství]]></category>
		<category><![CDATA[UID]]></category>
		<category><![CDATA[zubní kartáček]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2618</guid>

					<description><![CDATA[<p>Nulování počítadla kartáčkové hlavice Philips SoniCare Jednoduchý návod pro každou lamu. V minulém článku jsme si řekli jak probíhalo reverzní &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2025/02/02/nulovani-pocitadla-kartackove-hlavice-philips-sonicare/">Nulování počítadla kartáčkové hlavice Philips SoniCare</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h3>Nulování počítadla kartáčkové hlavice Philips SoniCare</h3>
<p>Jednoduchý návod pro každou lamu. V minulém článku jsme si řekli jak probíhalo reverzní inženýrství zubního elektrického kartáčku Philips SoniCare. Nyní si ukážeme jen jednoduchý ale podrobný návod jak na to. Zvládne to opravdu každý. </p>
<p>Nejprve budete potřebovat aplikaci  <strong>NFC Tools.</strong>  Jedná se o aplikaci pro práci s NFC čipem který je umístěn v samotné hlavici kartáčku. Aplikace je k dispozici buď pro <a href="https://apps.apple.com/us/app/nfc-tools/id1252962749">iOS</a> nebo <a href="https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&amp;hl=cs">Android</a>.</p>
<p>Teď musíte najít UID hlavice kartáčku. K tomu použijte aplikaci NFC Tools. Využijeme funkci <strong>“Číst”</strong> Tady zjistíme základní informace. Pokud chcete vidět kompletní výpis karty, jdeme do menu <strong>Jiné/Others</strong> <strong>- Read - Edit memory</strong>  Tím získáte dlouhý seznam adres a jejich dat. Najdeme tam i své <strong>UID</strong> v prvních dvou řádcích. </p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/02/nfcuid-1024x597.webp" alt="" /></p>
<p>Ve výše uvedeném snímku obrazovky je UID 04:03:47:7A:22:70:81. (Poslední bajt na první adrese je ignorován, protože se jedná o hodnotu BCC0 a nikoli část UID.)</p>
<p>Teďbudeme potřebovat kód produktu. Ten je vytištěn na spodní straně kovového ráfku na základně hlavy:</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/02/sonicareHead-1024x997.webp" alt="" /></p>
<p>Nebo to najdete zakódováno v ASCII na adresách 21 až 23 (ignorujte první 2 byty).</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/02/IMG_5734-1024x852.webp" alt="" /></p>
<p>Teď máme všechny potřebná data k vygenerovaní hesla pro odemčení a vymazaní čítače/počítadla doby používání kartáčkové hlavice.  Přejdeme na stránku SonicareGenerator a vygenerujeme jedinečný příkaz který obsahuje příkaz pro nastavení původní hodnoty a heslo (1B:61:F0:A5:0F,A2:24:00:00:02:00) pro reset hlavice kartáčku: </p>
<h3><a href="https://data.ok2hss.cz/SoniCracker/sonicrackare.html" title="Generátor hesel SONICARE"><strong>Generátor hesel SONICARE</strong></a></h3>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/02/Snimek-obrazovky-2025-02-01-v-12.59.11-1024x604.webp" alt="" /></p>
<p><a href="https://www.hardwired.dev/wp-content/uploads/2025/02/Snimek-obrazovky-2025-02-01-v-13.05.10-png.webp"><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/02/Snimek-obrazovky-2025-02-01-v-13.05.10-1024x287.webp" alt="" /></a></p>
<p>V NFC Tools aplikaci, přejdeme na <strong>“Advanced NFC commands”</strong> zadáme svůj konkrétní příkaz který nám vygeneroval <strong>Password Generátor</strong> do pole <strong>“Data”</strong> a odešlete jej do hlavice kartáčku. Hlava pro resetování získá původní hodnoty čítače/počítadla a můžeme používat další periodu. Toto můžeme opakovat do nekonečna ale doporučuji to u jedne čistíci hlavice udělat max 2x aby štětiny neztratili svoji pružnost a funkci.</p>
<p><a href="https://www.hardwired.dev/wp-content/uploads/2025/02/nfc_during-png.webp"><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/02/nfc_during-461x1024.webp" alt="" /></a></p>
<p>Svět by byl lepší místo, kdyby nenažrané korporace nešly jen po zisku.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2025%2F02%2F02%2Fnulovani-pocitadla-kartackove-hlavice-philips-sonicare%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/02/02/nulovani-pocitadla-kartackove-hlavice-philips-sonicare/">Nulování počítadla kartáčkové hlavice Philips SoniCare</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ESP32 Bluetooth Server</title>
		<link>https://www.hardwired.dev/2023/02/01/esp32-bluetooth-server/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Wed, 01 Feb 2023 03:28:54 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[Různé]]></category>
		<category><![CDATA[android]]></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>
		<category><![CDATA[vscode]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=938</guid>

					<description><![CDATA[<p>Dneska se podíváme jak zprovoznit Bluetooth na ESP32. Cílem je umožnit telefonu připojit se na naše Bluetooth zařízení a odpovídat &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2023/02/01/esp32-bluetooth-server/">ESP32 Bluetooth Server</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>Dneska se podíváme jak zprovoznit Bluetooth na ESP32. Cílem je umožnit telefonu připojit se na naše Bluetooth zařízení a odpovídat na specifické zprávy. Jako vývojové prostředí použijeme <a href="https://platformio.org/">PlatformIO</a>.</p>
<h1>ESP32</h1>
<p>Pro projekt použijeme <a href="https://www.aliexpress.com/item/32996458212.html">ESP32 Development Board</a> z Aliexpressu. V době psaní článku stojí zhruba 120CZK.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2023/02/esp32-aliexpress.jpg" alt="" /></p>
<h1>platformio.ini</h1>
<p>Konfigurační soubor pro projekt.</p>
<pre><code class="language-ini">[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200</code></pre>
<h1>main.cpp</h1>
<p>Jako základ kódu jsem použil výborný článek <a href="https://navody.dratek.cz/navody-k-produktum/esp32-a-bluetooth-low-energy-ble.html">ESP32 a Bluetooth Low Energy (BLE)</a> z <a href="https://navody.dratek.cz/">Drátek Návody</a> a provedl úpravy pro potřeby projektu. Pro zjednodušení nejprve celý kód projektu. Rozbor bude pokračovat.</p>
<pre><code class="language-c++">#include &lt;Arduino.h&gt;

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

// inicializace modulu z knihovny
BLECharacteristic *pCharacteristic;

// proměnná pro kontrolu připojených zařízení
bool deviceConnected = false;

// proměnná pro ukládání přijaté zprávy
std::string receivedMessage;

// proměnná pro zprávu pro odeslání
String out = &quot;&quot;;

// definice unikátních ID pro různé služby,
// pro vlastní UUID využijte generátor
// https://www.uuidgenerator.net/
#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;

int compareCommand(std::string message, String command)
{
    String converted = String(message.c_str());
    converted.trim();
    converted.toLowerCase();

    return converted == command;
}

void setOutputMessage(String message)
{
    out = message;
    out += &quot;\n&quot;;
}

void clearOutputMessage()
{
    out = &quot;&quot;;
}

void sendMessage()
{
    char message[out.length() + 1];
    out.toCharArray(message, out.length() + 1);

    // přepsání zprávy do BLE služby
    pCharacteristic-&gt;setValue(message);

    // odeslání zprávy skrze BLE do připojeného zařízení
    pCharacteristic-&gt;notify();
}

// třída pro kontrolu připojení
class MyServerCallbacks : public BLEServerCallbacks
{
    // při spojení zařízení nastav proměnnou na log1
    void onConnect(BLEServer *pServer)
    {
        deviceConnected = true;
    };
    // při odpojení zařízení nastav proměnnou na log0
    void onDisconnect(BLEServer *pServer)
    {
        deviceConnected = false;
        pServer-&gt;getAdvertising()-&gt;start();
    }
};

// třída pro příjem zprávy
class MyCallbacks : public BLECharacteristicCallbacks
{
    // při příjmu zprávy proveď následující
    void onWrite(BLECharacteristic *pCharacteristic)
    {
        // načti přijatou zprávu do proměnné
        receivedMessage = pCharacteristic-&gt;getValue();

        // pokud není zpráva prázdná, vypiš její obsah
        // po znacích po sériové lince
        // a pokud přijde očekávaný příkaz pošli odpověď
        if (receivedMessage.length() &gt; 0)
        {
            Serial.print(&quot;Prijata zprava: &quot;);
            for (int i = 0; i &lt; receivedMessage.length(); i++)
            {
                Serial.print(receivedMessage[i]);
            }
            Serial.println();

            if (compareCommand(receivedMessage, &quot;ahoj&quot;))
            {
                setOutputMessage(&quot;No nazdar&quot;);
            }
        }
    }
};

void setup()
{
    // zahájení komunikace po sériové lince
    // rychlostí 115200 baud
    Serial.begin(115200);

    // inicializace Bluetooth s nastavením jména zařízení
    BLEDevice::init(&quot;ESP32 BLE&quot;);

    // vytvoření BLE serveru
    BLEServer *pServer = BLEDevice::createServer();
    pServer-&gt;setCallbacks(new MyServerCallbacks());

    // vytvoření BLE služby
    BLEService *pService = pServer-&gt;createService(SERVICE_UUID);

    // vytvoření BLE komunikačního kanálu pro odesílání (TX)
    pCharacteristic = pService-&gt;createCharacteristic(
        CHARACTERISTIC_UUID_TX,
        BLECharacteristic::PROPERTY_NOTIFY);
    pCharacteristic-&gt;addDescriptor(new BLE2902());

    // vytvoření BLE komunikačního kanálu pro příjem (RX)
    BLECharacteristic *pCharacteristic = pService-&gt;createCharacteristic(
        CHARACTERISTIC_UUID_RX,
        BLECharacteristic::PROPERTY_WRITE);
    pCharacteristic-&gt;setCallbacks(new MyCallbacks());

    // zahájení BLE služby
    pService-&gt;start();

    // zapnutí viditelnosti BLE
    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)
    {
        sendMessage();
        delay(100);
        clearOutputMessage();
    }

    // pauza před novým během smyčky
    delay(1000);
}</code></pre>
<h1>Rozbor kódu</h1>
<pre><code class="language-cpp">#include &lt;Arduino.h&gt;

// Bluetooth knihovny
#include &lt;BLEDevice.h&gt;
#include &lt;BLEServer.h&gt;
#include &lt;BLEUtils.h&gt;
#include &lt;BLE2902.h&gt;</code></pre>
<p>Knihovny potřebné pro obsluhu Bluetooth.</p>
<pre><code class="language-cpp">BLECharacteristic *pCharacteristic;</code></pre>
<p>Inicializace modulu knihovny pro práci s Bluetooth.</p>
<pre><code class="language-cpp">bool deviceConnected = false;</code></pre>
<p>Indikace, že je zařízení připojeno k našemu Bluetooth zařízení.</p>
<pre><code class="language-cpp">std::string receivedMessage;</code></pre>
<p>Proměnná pro uložení zprávy, kterou pošleme našemu Bluetooth zařízení.</p>
<pre><code class="language-cpp">String out = &quot;&quot;;</code></pre>
<p>Proměnná pro uložení odchozí zprávy.</p>
<pre><code class="language-cpp">#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;</code></pre>
<p>Bluetooth se skládá z jednotlivých služeb pro které je mít potřeba vygenerované unikátní identifikátory.</p>
<pre><code class="language-cpp">int compareCommand(std::string message, String command)
{
    String converted = String(message.c_str());
    converted.trim();
    converted.toLowerCase();

    return converted == command;
}</code></pre>
<p>Naše Bluetooth zařízení se chová jako server. Pokud mu pošlete zprávu/příkaz, který rozpozná, tak odpoví zpět. Příchozí zpráva se ukládá do proměnné typu <code>std::string</code>. Zprávu je potřeba očistit od bílých znaků, normalizovat (převést na malá písmena <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;" /> ) a porovnat s příkazem, který chceme provést. Tady byl lehce zádrhel, protože vhodné metody obsahuje zase <code>String</code> objekt. Céčko/C++ jsem provozoval naposledy na vysoké pro školní projekty a už tam jsem většinu věcí řešil v Pythonu. Jsem už prostě zmlsaný moderními programovacími jazyky. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Mé řešení asi nebude nejefektivnější, ale je lehce čitelné a funguje.</p>
<p>TLDR: <code>compareCommand</code> vezme příchozí zprávu, očistí od bordelu, porovná s námi zadaným příkazem a vrátí hodnotu porovnání.</p>
<pre><code class="language-cpp">void setOutputMessage(String message)
{
    out = message;
    out += &quot;\n&quot;;
}</code></pre>
<p>Pomocná funkce pro nastavení odchozí zprávy.</p>
<pre><code class="language-cpp">void clearOutputMessage()
{
    out = &quot;&quot;;
}</code></pre>
<p>Pomocná funkce pro vyčistění proměnné po odeslání zprávy.</p>
<pre><code class="language-cpp">void sendMessage()
{
    char message[out.length() + 1];
    out.toCharArray(message, out.length() + 1);

    pCharacteristic-&gt;setValue(message);

    pCharacteristic-&gt;notify();
}</code></pre>
<p>Funkce zapouzdřující odeslání zprávy. Převede zprávu na pole znaků, předá Bluetooth knihovně a pomocí metody <code>notify</code> odešle na připojené zařízení.</p>
<pre><code class="language-cpp">class MyServerCallbacks : public BLEServerCallbacks
{
    void onConnect(BLEServer *pServer)
    {
        zarizeniPripojeno = true;
    };

    void onDisconnect(BLEServer *pServer)
    {
        zarizeniPripojeno = false;
        pServer-&gt;getAdvertising()-&gt;start();
    }
};</code></pre>
<blockquote>
<p>Během testů se objevil problém s opětovným připojením. Když se telefon odpojil od Bluetooth serveru, nešlo se znovu připojit. Pomohl jen restart ESPčka. Dle různých zdrojů za to můžou různé verze knihoven. Pokud přidáme při odpojení zařízení <code>pServer-&gt;getAdvertising()-&gt;start();</code>, který začne propagovat náš Bluetooth server do prostoru, opětovné připojení funguje.</p>
</blockquote>
<p>Třída zapouzdřující <code>callbacky</code> pro náš Bluetooth server. Pokud se zařízení připojí/odpojí nastaví proměnnou <code>deviceConnected</code>.</p>
<pre><code class="language-cpp">class MyCallbacks : public BLECharacteristicCallbacks
{
    void onWrite(BLECharacteristic *pCharacteristic)
    {
        receivedMessage = pCharacteristic-&gt;getValue();

        if (receivedMessage.length() &gt; 0)
        {
            Serial.print(&quot;Prijata zprava: &quot;);
            for (int i = 0; i &lt; receivedMessage.length(); i++)
            {
                Serial.print(receivedMessage[i]);
            }
            Serial.println();

            if (compareCommand(receivedMessage, &quot;ahoj&quot;))
            {
                setOutputMessage(&quot;No nazdar&quot;);
            }
        }
    }
};</code></pre>
<p>Třída zapouzdřující <code>callback</code> pro příjem zprávy. Při příchozí zprávě nenulové délky se jako první vypíše do sériové konzole. Následně proběhne porovnání jestli obsahuje, pro nás známý, příkaz. V našem případě <code>ahoj</code>. Pokud ano, tak odpoví <code>No nazdar</code>.</p>
<h2>setup()</h2>
<pre><code class="language-cpp">Serial.begin(115200);</code></pre>
<p>Nastavení rychlostí komunikace přes sériovou linku. Musí být stejné jako v <code>platformio.ini</code>.</p>
<pre><code class="language-cpp">BLEDevice::init(&quot;ESP32 BLE&quot;);</code></pre>
<p>Inicializace Bluetooth s nastavením jména, na které se bude dát z telefonu připojit.</p>
<pre><code class="language-cpp">BLEServer *pServer = BLEDevice::createServer();
pServer-&gt;setCallbacks(new MyServerCallbacks());</code></pre>
<p>Vytvoření Bluetooth serveru. Nastavíme <code>callbacky</code> pro detekci připojení/odpojení zařízení pomocí třídy nadefinované výše.</p>
<pre><code class="language-cpp">BLEService *pService = pServer-&gt;createService(SERVICE_UUID);</code></pre>
<p>Vytvoření Bluetooth služby.</p>
<pre><code class="language-cpp">pCharacteristic = pService-&gt;createCharacteristic(
        CHARACTERISTIC_UUID_TX,
        BLECharacteristic::PROPERTY_NOTIFY);
pCharacteristic-&gt;addDescriptor(new BLE2902());</code></pre>
<p>Vytvoření komunikačního kanálu pro odesílání zpráv.</p>
<pre><code class="language-cpp">BLECharacteristic *pCharacteristic = pService-&gt;createCharacteristic(
        CHARACTERISTIC_UUID_RX,
        BLECharacteristic::PROPERTY_WRITE);
pCharacteristic-&gt;setCallbacks(new MyCallbacks());</code></pre>
<p>Vytvoření kanálu pro příjem zpráv. Nastavujeme <code>callback</code> pro příjem nadefinovaný výše.</p>
<pre><code class="language-cpp">pService-&gt;start();</code></pre>
<p>Nastartování Bluetooth služby.</p>
<pre><code class="language-cpp">pServer-&gt;getAdvertising()-&gt;start();
Serial.println(&quot;BLE nastaveno, ceka na pripojeni..&quot;);</code></pre>
<p>Zviditelnění pro ostatní zařízení.</p>
<h2>loop()</h2>
<pre><code class="language-cpp">if (deviceConnected == true &amp;&amp; out.length() &gt; 0)
{
    sendMessage();
    delay(100);
    clearOutputMessage();
}

delay(1000);</code></pre>
<p><code>Loop</code> smyčka každou sekundu zkontroluje jestli je zařízení připojené k našemu Bluetooth serveru a jestli existuje zpráva co by šla odeslat. Pokud jsou obě podmínky splněny odešleme zprávu a vyčistíme data.</p>
<h2>TLDR</h2>
<p>Bluetooth server čeká na zp rávy. Pokud přijde zpráva, která obsahuje známy příkaz, nastaví se příslušné proměnné. Smyčka <code>loop</code> každou sekundu zkontroluje jestli jsou příslušné proměnné pro odchozí zprávu a pokud ano odešle zprávu na připojené zařízení. No raketová věda to teda není. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h1>Serial Bluetooth Terminal</h1>
<p>Kód je zkompilovaný, nahraný na ESP32 a běží. Teď je potřeba začít s naším Bluetooth zařízením komunikovat. Pro Android jde použít výbornou aplikaci <a href="https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&amp;hl=cs&amp;gl=US">Serial Bluetooth Terminal</a>. Umí to co potřebujeme. Připojit se k zařízení, posílat a obdržet zprávy.</p>
<p>Po instalaci se v obrazovce <code>Devices</code> přepněte do tabu <code>Bluetooth LE</code> a naskenujte zařízení. Objeví se naše ESPčko. Kliknutím na něj se připojíte.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2023/02/ble-terminal-01.jpg" alt="" /></p>
<p>Pokud připojení proběhne v pořádku zobrazí se následující.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2023/02/ble-terminal-02.jpg" alt="" /></p>
<p>Po odeslání zprávy <code>ahoj</code> dostaneme odpověď.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2023/02/ble-terminal-03.jpg" alt="" /></p>
<h1>Závěr</h1>
<p>Prezentovaný kód je takové minimum, bez hlubší znalosti Bluetooth a jeho vnitřního fungování, které ověřuje koncept ESP32 jako Bluetooth serveru odpovídajícího na příkazy.</p>
<p>Happy coding.</p>

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