1 2 3 4 5<!DOCTYPE html> 6<html lang="en"> 7 <head> 8 <meta charset="utf-8" /> 9 <link href="/style.css" rel="stylesheet" /> 10 <title>Improv Wi-Fi: Open standard for setting up Wi-Fi via Bluetooth LE and Serial</title> 11 <link rel="icon" href="/images/improv-favicon.png" type="image/png" /> 12 <meta name="description" content="Free and open standard with ready-made SDKs that offer a great user experience to configure Wi-Fi on devices." /> 13 <meta name="viewport" content="width=device-width" /> 14 <meta property="og:title" content="Improv Wi-Fi: Open standard for setting up Wi-Fi via Bluetooth LE and Serial" /> 15 <meta property="og:site_name" content="Improv Wi-Fi" /> 16 <meta 17 property="og:url" 18 content="https://www.improv-wifi.com/" 19 /> 20 <meta property="og:type" content="website" /> 21 <meta property="og:description" content="Free and open standard with ready-made SDKs that offer a great user experience to configure Wi-Fi on devices." /> 22 <meta 23 property="og:image" 24 content="https://www.improv-wifi.com/images/social.png" 25 /> 26 <meta name="twitter:card" content="summary_large_image" /> 27 <meta name="twitter:title" content="Improv Wi-Fi: Open standard for setting up Wi-Fi via Bluetooth LE and Serial" /> 28 <meta name="twitter:description" content="Free and open standard with ready-made SDKs that offer a great user experience to configure Wi-Fi on devices." /> 29 <meta 30 name="twitter:image" 31 content="https://www.improv-wifi.com/images/social.png" 32 /> 33
33<script type="module" src="/sdk-ble-js/launch-button.js"></script>
33 34
34<script type="module" src="/sdk-serial-js/serial-launch-button.js"></script>
34 35 36
36<script 37 async 38 src="https://plausible.openhomefoundation.org/js/pa-1mfDNxbEdbdL5NncgrXnA.js" 39></script>
39 40
41<script> 42 (function () { 43 // Visitors arriving from their own Home Assistant or ESPHome instance send 44 // their private URL as the referrer. The allow list is downloaded at build 45 // time by script/download_allowed_referrers; every referrer that is not on 46 // it gets replaced before Plausible records it. 47 var allowedReferrers = ["01net.com","1140369499-atari-embeds.googleusercontent.com","1ms.run","360.cn","3dmart.com.hk","4pda.to","a2t.ro","abfalltermine.de","adaptive-lighting.nijho.lt","adonno.com","agsi.gie.eu","aio-libs.org","air-q.com","airgradient.com","akamatis.com","akkudoktor.net","alarmy-olomouc.eu","alkly.de","all3dp.com","alvinchen.club","alza.cz","amazon.com","ameridroid.com","amplipi.discourse.group","androidauthority.com","androidpolice.com","api.daily.dev","api.home-connect.com","api.mcs3.miele.com","api.smartthings.com","apolloautomation.com","app.aevocam.com","app.parqet.com","appleid.apple.com","apps.garmin.com","apps.yunohost.org","arstechnica.com","askubuntu.com","asustor.com","atomic14.com","audiosciencereview.com","auth.tesla.com","automatedhome.co.uk","auweb3.isolarcloud.com","avenom.ru","awesome-ha.com","badrpc.net","baidu.com","baidu.io","banglejs.com","basehim.com","bazmac.me","bbs.hassbian.com","bbs.io-tech.fi","bega.com","berrybase.de","better-thermostat.org","billboard.com.br","bing.com","bitbucket.org","blog.decryption.net.au","blog.eischmann.cz","blog.fidelramos.net","blog.frankel.ch","blog.fxpblogs.win","blog.iot7m.ru","blog.kastanis.gr","blog.matterxiaomi.com","blog.meyerrj.com","blog.oppedahl.com","blog.slabnet.com","blog.tindie.com","blog.tomayac.com","blog.uaid.net.ua","blog.vyoralek.cz","blogspot.com","botland.com.pl","botland.de","brandlogos.org","bricozone.be","broddin.be","bsky.app","bthome.io","buildroot.org","byteoversea.com","card.camera","cb.wjz.im","cdninstagram.com","chat.novaapp.ai","chat.qwen.ai","chatgpt.com","check.anomify.ai","chip.de","chuck-builds.com","chytrevypinace.cz","ci.computer","claude.ai","clausio.fr","cloud.bemfa.com","cloud.vento.build","cloudfree.shop","clubic.com","cn.d5render.com","cnet.com","cnx-software.com","cnx-software.ru","coccoc.com","codeberg.org","codechimp.org","coinforum.de","community-smarthome.com","community.asti.ga","community.openhab.org","community.shelly.cloud","community.victronenergy.com","computerbase.de","connexion.hiloenergie.com","coolify.io","copilot.com","copilot.microsoft.com","couto.io","creator-spring.com","credexalarmsystems.eu","crowdsupply.com","dakboard.freshdesk.com","danielmartingonzalez.com","darsycertificationconsumer-wu2.azurewebsites.net","dashieapp.com","dastereo.ru","dc9vq.de","de.aliexpress.com","de.jackery.com","de.wikipedia.org","dealabs.com","deepwiki.com","degroenenerds.nl","derekseaman.com","desdeelreloj.com","dev.to","developer.chrome.com","developer.home-connect.com","developer.tuya.com","developerinsider.co","devotics.fr","devzen.ru","dfrobot.com","dietpi.com","dinamotech.it","discord.com","discovergit.app","disq.us","diy-smart-home.ei23.de","diyenjoying.com","diyfun.de","diyless.com","diysolarforum.com","doc.embedfire.com","doc.mocreo.com","docker.com","docs.evcc.io","docs.everythingsmart.io","docs.futureproofhomes.net","docs.gl-inet.com","docs.kilowahti.fi","docs.ncnynl.com","docs.openpublictransport.net","docs.paperd.ink","docs.powercalc.nl","docs.sunfounder.com","docs.tandoor.dev","docs.yaha-cloud.ru","docs.zephyrproject.org","documentation.grandstream.com","domadoo.fr","domasist.sk","domoticafacile.it","done.land","donetick.com","dopper.de","dou.ua","doubao.com","drive2.ru","duck.ai","duckduckgo.com","ecosia.org","edubox.org","efulfillservice.sugarondemand.com","element.io","en.m.nu","en.wikipedia.org","energyforecast.de","engadget.com","esp32.co.uk","espboards.dev","esphome.io","espresense.com","espressif.com","espruino.com","everythingsmarthome.co.uk","ewelinkstore.com","facebook.be","facebook.com","facebook.de","facebook.dk","facebook.es","facebook.fr","facebook.is","facebook.it","facebook.jp","facebook.mx","facebook.nl","facebook.no","facebook.se","facebook.us","faire-ca-soi-meme.fr","fancontroller.arthofer.dev","fb.com","fb.me","fbcdn.com","fbcdn.net","fitbit.com","flasher.site","fleet-auth.prd.vn.cloud.tesla.com","flipboard.com","flow.bosch-ebike.com","flows.blueforcer.de","foro.domoticaencasa.es","forum.arduino.cc","forum.armbian.com","forum.arturhome.pl","forum.ewelink.cc","forum.hardware.fr","forum.heimnetz.de","forum.iobroker.net","forum.it.mk","forum.jdtech.pl","forum.keenetic.ru","forum.magicmirror.builders","forum.mikrotik.com","forum.mypower.cz","forum.proxmox.com","forum.sailfishos.org","forum.sessy.nl","forum.wiimhome.com","forum.yunohost.org","forums.dansdeals.com","forums.lyrion.org","forums.pocketcasts.com","forums.raspberrypi.com","forums.truenas.com","fosstodon.org","foxesscommunity.com","fr.aliexpress.com","frandroid.com","frenck.dev","front-page.com","fuzznotes.com","fwd.nl","gadgets.seeed.cc","gea.com","geekxw.top","genbeta.com","getaipilot.com","gethomepage.dev","gigazine.net","git.hubp.de","github.blog","github.com","github.io","gitlab.com","gitlab.io","go.aftvnews.com","go.michaelsleen.com","golem.de","google.at","google.be","google.bg","google.ca","google.ch","google.co.jp","google.co.kr","google.co.nz","google.co.uk","google.co.za","google.com","google.com.au","google.com.br","google.com.hk","google.com.mx","google.com.my","google.com.pk","google.com.sa","google.com.sg","google.com.tr","google.com.tw","google.com.ua","google.com.vn","google.cz","google.de","google.es","google.fi","google.fr","google.hu","google.io","google.it","google.nl","google.pl","google.pt","google.ro","google.se","gotailwind.com","grokipedia.com","gstatic.
47com","haade.fr","habr-com.cdn.ampproject.org","habr.com","hacf.fr","hachyderm.io","hackaday.com","hacks.mozilla.org","hackster.io","hacs.dev","hacs.xyz","hadevices.com","hads.smarti.dev","handbook.buildwithmatter.com","hardware.info","hashop.nl","hass-agent.io","hass-cloud.auth.us-east-1.amazoncognito.com","hass.dev","hasscn.top","hatenablog-parts.com","haus-bus.de","hcker.news","hckrnews.com","healthassistantlink.com","heise.de","helgejohnsen.no","helios-ha.org","help.olarm.com","hiringcafe.com","hjemmeautomasjon.no","home-assistant-guide.com","home-assistant.cloud","home-assistant.dev","home-assistant.io","home-assistant.jp","home-master.eu","homeassistant-cz.cz","homeassistant.cloud","homeassistant.io","homeassistantbrasil.com.br","homebrainz.de","homekitnews.com","homething.io","homey.app","howtogeek.com","hwupgrade.it","hydrificwater.com","hydroqc.ca","hyotynen.iki.fi","iam.viessmann-climatesolutions.com","ias-lab.de","ibytedtos.com","ictfreak.nl","id.daikin.eu","id.whoop.com","ifa-berlin.com","ig.me","igen.fr","ikriz.nl","improv-wifi.com","indomus.it","industrialshields.
47com","inet.se","influxdata.com","infosec.exchange","inoreader.com","insiderllm.com","instagr.am","instagram.com","install.wled.me","intellicaai.space","internet.org","interop.ondilo.com","iona-ha.tinohox.de","iot.vivo.com.cn","ipstatp.com","ithelp.ithome.com.tw","itmedia.co.jp","itrend24.de","itsfoss.com","jamesachambers.com","jimwillis.org","jiuyv.info","joekarlsson.com","jonashietala.se","jpk.io","jpt.sh","jupiterbroadcasting.com","kagi.com","kb.shelly.cloud","kincony.com","kitchenowl.org","kiwi-warmer.co.nz","kjell.com","knightsoft-net.de","knuspermagier.de","knx-user-forum.de","kofler.info","konnected.io","konnected.readme.io","korben.info","kotyara12.ru","l.meta.ai","lampopumput.info","languagetool.org","lappari.com","legeek.info","leios.consulting","lemmy.lundgrensjostrom.com","lemmy.ml","lemmy.world","libhunt.com","life.taikun.blog","liliputing.com","link.csdn.net","link.gitcode.com","linkedin.com","linkshop.gr","linuxiac.com","linuxmint.com","listenbrainz.org","llmvision.gitbook.io","lnkd.in","lobste.rs","loxwiki.atlassian.net","lunoo.com","luxxle.com","lwn.net","m.me","m.sogou.com","m5stack.com","macrumors.com","mactechnews.de","mail.gnome.org","mail.qq.com","maison-et-domotique.com","makerworld.com","makeuseof.com","manelrodero.com","manuals.plus","masto.pt","mastodon.me.uk","mastodon.social","mastodon.top","matrix.to","matteoschizzerotto.dev","matteralpha.com","mattgerega.com","mauser.pt","mediarath.de","medievalapple.net","medium.com","meetco.daily.co","meinesmartewelt.de","memory.gmbot.name.vn","mergeo.dev","metabrainz.org","metager.de","mistyreverie.org","mobiflip.de","mobile-ma.app","moi.ouraring.com","mojeek.com","mostlychris.com","mqtt.cn","ms0701.tistory.com","msn.com","mu.zpete.de","mushkatyush.com","music-assistant.com","music-assistant.io","musical.ly","mwunderling.com","mypal.wang","mysku.club","nabucasa.com","nachbelichtet.com","nathan.gs","nathanorick.com","nativesprings.com","naver.com","navid.nl","navimow-h5-fra.willand.com","ncot.uk","neilturner.me.uk","netlify.app","nettop.gr","newepisody.com","newinlinux.com","news.hada.io","news.ycombinator.com","newsblur.com","ngocjohn.is-a.dev","norbert.tech","note.com","notebookcheck.net","notenoughtech.com","notify.events","npmjs.com","nspanel.domodreams.it","ntp.msn.cn","nuki.io","numerama.com","oauth.hijuconn.com","oceanhero.today","ogo.live","ohf.to","okosotthon.bolt.hu","olausson.de","olegtarasov.me","omgubuntu.co.uk","openai.com","opendisplay.org","openelab.io","openhasp.com","openhomefoundation.org","openthread.io","oshwhub.com","osnews.com","ottelo.jimdofree.com","ozsmartthings.com.au","pages.dev","paulusschoutsen.nl","pdx.su","perfectmediaserver.com","perplexity.ai","phanpy.social","phoronix.com","pi-shop.ch","pidiylab.com","pikabu.ru","pinboard.in","pine64.org","pinimg.com","pinterest.at","pinterest.ca","pinterest.co.uk","pinterest.com","pinterest.com.au","pinterest.com.mx","pinterest.de","pinterest.dk","pinterest.es","pinterest.fr","pinterest.ie","pinterest.it","pinterest.jp","pinterest.ph","pinterest.se","pixelstech.net","pluginsolarexplained.co.uk","portal.alarmtrade.ru","powerbaas.nl","powerforum.co.za","press.opera.com","printables.com","privacywall.org","prodindego.b2clogin.com","protopage.com","psenyukov.ru","psmart.pl","publish.obsidian.md","pushover.net","pypi.org","qiita.com","quark.cn","qwant.com","racemat.de","radio-browser.info","raspberrypi.dk","rbaron.net","read.readwise.io","readthedocs.io","reddit.com","reedah.com","repo.webosbrew.org","rivianforums.com","robbshop.nl","robert.stadsbygd.net","robpickering.com","root.cz","rudd-o.com","runtimeterror.dev","ruuvi.com","safe.menlosecurity.com","search.avastbrowser.com","search.brave.com","search.kafu.ovh","search.nixos.org","search.nortonsafesearch.com","search.yahoo.com","seeedstudio.com","seegel-systeme.de","selectra.info","selfh.st","selorahomes.com","sendspin-audio.com","sequr.be","servercan.net","serverfault.com","servethehome.com","seznam.cz","sheekgeek.org","sheets.works","shellagent.io","shop.everythingsmart.io","shop.pimoroni.com","signalk.org","signalkraft.com","simon42.com","simplehomelab.com","simplepush.io","sl-alex.net","slack.com","slashdot.org","slimhuisje.nl","smart-home-insights.net","smartdomo.de","smarterhome.sk","smarterkram.de","smarterpapa.de","smartevchargers.co.nz","smartguys.com.au","smarthome-assistant.info","smarthome.com.au","smarthomeassistent.de","smarthomegids.com","smarthomepursuits.com","smarthomescene.com","smarthomesecrets.ca","smarthomesolver.com","smarthomeyourself.de","smartnetandhubs.com","smlight.tech","snbforums.com","so.com","social.slat.org","solar-assistant.io","sonocotta.com","sonoff.tech","sourceforge.net","spacen.io","spfile.heimanhome.com","srwiez.com","sso.bluettipower.com","stackexchange.com","stackoverflow.com","stadt-bremerhaven.de","startpage.com","static.xtremeownage.com","steamcommunity.com","steeman.be","student-techlife.com","style.oversubstance.net","substack.com","sunenergyxt.com","superuser.com","support.bbdl.co.uk","supp
47ort.lightwaverf.com","support.powerfox.energy","support.weheat.nl","svrforum.com","sweclockers.com","swiss-domotique.ch","swisscows.com","symbaloo.com","sysadmin.in.th","t.co","t.me","t3n.de","taiwansensor.com.tw","teams.public.onecdn.static.microsoft","techboys.de","techcrunch.com","techenclair.fr","techfeed.io","technikblock.de","techurls.com","tecnoyfoto.com","telegram.me","telegram.org","terncy.com.tw","teslafacts.nl","teslemetry.com","thecandidstartup.org","themalibucrew.com","theorangeone.net","thepihut.com","theregister.com","thestockpot.net","theverge.com","threads.net","tightloop.io","tiktok.com","tiktokcdn.com","tiktokv.com","tomshardware.com","tomshw.it","tomtut.de","tool.screek.io","toot.community","topgit.dev","toppodcast.com","totaldebug.uk","trello.com","trick.vanstaveren.us","trmnl.com","troyhernandez.com","tutorials-raspberrypi.de","tweakers.net","tweetdeck.com","twingate.com","twitter.com","typingmind.com","uix.lf.technology","ultravehiclecard.com","unfoldedcircle.com","uniuit.com","url-opener.com","us.shelly.com","uscardforum.com","ut.buglloc.com","varac.net","vercel.app","verdrahtet.info","verkkokauppa.nurkantakaa.fi","versatile-thermostat.org","web.archive.org","web.max.ru","webhallen.com","webshed.org","westhaver.com","wiert.me","wifishop.ro","wiki.fabianhorst.com","wiki.freshtomato.org","wiki.futo.org","wimme.net","wired.com","wordpress.com","wulu.zone","www-hacs-xyz.translate.goog","www-home--assistant-io.translate.goog","x.com","xataka.com","xda-developers.com","xfinderr.org","xn--80abzsjfcff6fi.xn--p1ai","ya.ru","yahoo.co.jp","yandex.by","yandex.com","yandex.kz","yandex.ru","yandex.uz","yandex.xyz","yetanothersmarthome.com","youtu.be","youtube-nocookie.com","youtube.com","yuanbao.tencent.com","yuque.com","zdnet.com","zenodo.org","zerlo.net","zigbee.blakadder.com","zigbee2mqtt.io","zimaspace.com","zuidwijk.com"]; 48 49 window.plausible = 50 window.plausible || 51 function () { 52 (plausible.q = plausible.q || []).push(arguments); 53 }; 54 plausible.init = 55 plausible.init || 56 function (options) { 57 plausible.o = options || {}; 58 }; 59 60 plausible.init({ 61 transformRequest: function (payload) { 62 var referrer = payload.r; 63 if (!referrer) return payload; 64 65 var host = ""; 66 try { 67 host = new URL(referrer).hostname.replace(/\.$/, ""); 68 } catch (err) { 69 // Unparseable referrer: falls through and gets replaced. 70 } 71 72 for (var i = 0; i < allowedReferrers.length; i++) { 73 var domain = allowedReferrers[i]; 74 if ( 75 host === domain || 76 (host.length > domain.length && 77 host.slice(-(domain.length + 1)) === "." + domain) 78 ) { 79 return payload; 80 } 81 } 82 83 // One aggregate bucket, so we can see how much we filter without 84 // learning anything about individual visitors. .invalid is reserved by 85 // RFC 2606 and can never collide with a real domain. 86 payload.r = "https://unlisted.invalid/"; 87 return payload; 88 }, 89 }); 90 })(); 91</script>
91 92 93 </head> 94 <body> 95 <div class="container"> 96 <div class="header"> 97 <a href="/"><img src="/images/improv-logo.svg" alt="Improv logo" /></a> 98 <ul> 99 100 <li> 101 <a 102 class="active" 103 href="/" 104 >Home</a 105 > 106 </li> 107 108 <li> 109 <a 110 class="" 111 href="/ble/" 112 >BLE</a 113 > 114 </li> 115 116 <li> 117 <a 118 class="" 119 href="/serial/" 120 >Serial</a 121 > 122 </li> 123 124 <li> 125 <a 126 class="" 127 href="/code/" 128 >Code</a 129 > 130 </li> 131 132 </ul> 133 </div> 134 135 <div class="content">
136<script 137 type="module" 138 src="https://unpkg.com/@justinribeiro/[email protected]/lite-youtube.js" 139></script>
139 140 141<h2> 142 Improv Wi-Fi is an open standard for connecting devices to Wi-Fi using Bluetooth LE or Serial 143</h2> 144 145<p> 146 Improv is a free and open standard with ready-made SDKs that offer a great 147 user experience to configure Wi-Fi on devices: 148</p> 149<ol> 150 <li>Power on device</li> 151 <li> 152 Client application uses Improv to send the Wi-Fi credentials to the device 153 </li> 154 <li>The device connects to Wi-Fi network and returns a URL</li> 155 <li>User visits URL to continue setting up the device</li> 156</ol> 157<p> 158 Improv protocol can be used over Bluetooth Low Energy or via the serial port. 159 Both protocols can also be used from a browser. 160</p> 161<div> 162 <h3>Improv via BLE</h3> 163 <improv-wifi-launch-button> 164 <span slot="unsupported"> 165 Your browser is not supported. To try it out, visit this page with Google 166 Chrome or Microsoft Edge<span class="not-supported-i hidden"> 167 (but not on your iOS device)</span 168 >. 169 </span> 170 </improv-wifi-launch-button> 171 <h3>Improv via Serial</h3> 172 <improv-wifi-serial-launch-button> 173 <span slot="unsupported"> 174 Your browser is not supported. To try it out, visit this page with Google 175 Chrome or Microsoft Edge<span class="not-supported-i hidden"> 176 (but not on your iOS device)</span 177 >. 178 </span> 179 </improv-wifi-serial-launch-button> 180</div> 181<p> 182 <i> 183 Need a device that runs Improv? 184 <a href="https://esphome.github.io/esp-web-tools/">Install this example</a> 185 on an ESP32. 186 </i> 187</p> 188<h3>See it in action</h3> 189<div class="videoWrapper"> 190 <lite-youtube 191 videoid="AdCsX7Ni6Jc" 192 videotitle="Improv Wi-Fi in action" 193 ></lite-youtube> 194</div> 195 196<h3>Adopted by the following projects</h3> 197 198<div class="projects"> 199 <a href="https://kno.wled.ge" target="_blank" class="project"> 200 <div class="logo"> 201 <img src="/images/wled.png" alt="WLED logo" /> 202 </div> 203 <div class="name">WLED</div> 204 </a> 205 <a 206 href="https://arendst.github.io/Tasmota-firmware/" 207 target="_blank" 208 class="project" 209 > 210 <div class="logo"> 211 <img src="/images/tasmota.svg" alt="Tasmota logo" /> 212 </div> 213 <div class="name">Tasmota</div> 214 </a> 215 <a href="https://www.esphome.io" target="_blank" class="project"> 216 <div class="logo"> 217 <img src="/images/esphome.svg" alt="ESPHome logo" /> 218 </div> 219 <div class="name">ESPHome</div> 220 </a> 221 <a href="https://www.home-assistant.io" target="_blank" class="project"> 222 <div class="logo"> 223 <img src="/images/home-assistant.svg" alt="Home Assistant logo" /> 224 </div> 225 <div class="name">Home Assistant</div> 226 </a> 227 <a 228 href="https://esphome.github.io/esp-web-tools/" 229 target="_blank" 230 class="project" 231 > 232 <div class="logo"> 233 <img src="/images/esp-web-tools.svg" alt="ESP Web Tools icon" /> 234 </div> 235 <div class="name">ESP Web Tools</div> 236 </a> 237 <a 238 href="https://clockwise.page" 239 target="_blank" 240 class="project"> 241 <div class="logo"> 242 <img src="/images/clockwise.png" alt="Clockwise logo" /> 243 </div> 244 <div class="name">Clockwise</div> 245 </a> 246 <a 247 href="https://sblantipodi.github.io/glow_worm_luciferin/" 248 target="_blank" 249 class="project"> 250 <div class="logo"> 251 <img src="/images/luciferin_logo.png" alt="Luciferin" /> 252 </div> 253 <div class="name">Luciferin</div> 254 </a> 255</div> 256 257<h3>The problem we're solving</h3> 258 259<p><b>Configuring a device to connect to your Wi-Fi network is a pain.</b></p> 260 261<p> 262 A lot of devices require to be connected to the network to be controlled or 263 receive data. The majority of these devices use Wi-Fi to establish a 264 connection with a local application or the cloud. 265</p> 266 267<p> 268 The most common approach is Soft Enabled Access Point. The device starts its 269 own Wi-Fi access point, the user connects to it with their phone/computer and 270 then interacts directly with the device via an app or a website served from 271 the device. 272</p> 273 274<p> 275 Itâs easy for something to go wrong. The user submits incorrect Wi-Fi 276 credentials or the phone loses access to the access point. In such cases it is 277 difficult to recover. Phones also have a bad time dealing with access points 278 that donât provide internet access. 279</p> 280 281<h3>Scope & Constraints</h3> 282<p> 283 The goal of the Improv standard is to get the device connected to the Wi-Fi 284 via Bluetooth Low Energy (BLE) or Serial (USB/UART). It is not the goal to 285 offer a way for devices to share data or control. The standard should work 286 without requiring the device to contain a screen. 287</p> 288 289<h3>More Reading</h3> 290 291<ul> 292 <li> 293 Read the <a href="/ble/">Bluetooth LE</a> or 294 <a href="/serial/">serial</a> documentation to see how it works 295 </li> 296 <li>Learn about <a href="/code/">the SDKs and code samples</a></li> 297</ul> 298
299<script> 300 if (/iPad|iPhone|iPod/.test(navigator.userAgent)) { 301 document.querySelector(".not-supported-i").classList.remove("hidden"); 302 } 303 304 const ble = document.querySelector('improv-wifi-launch-button'); 305 const serial = document.querySelector('improv-wifi-serial-launch-button'); 306 ble.addEventListener('click', () => { 307 serial.outerHTML = '<button disabled>Disabled until page reload</button>'; 308 }); 309 serial.addEventListener('click', () => { 310 ble.outerHTML = '<button disabled>Disabled until page reload</button>'; 311 }); 312</script>
312 313</div> 314 315 <div class="footer"> 316 <div> 317 Improv Wi-Fi â 318 <a href="mailto:[email protected]">Contact</a> 319 â 320 <a href="https://www.github.com/improv-wifi">GitHub</a> 321 </div> 322 <div class="initiative"> 323 Improv is an initiative by 324 <a href="https://www.esphome.io">ESPHome</a> & 325 <a href="https://www.home-assistant.io">Home Assistant</a>.<br /> 326 Development funded by 327 <a href="https://www.nabucasa.com">Nabu Casa</a>. 328 </div> 329 <div class="analytics"> 330 This website uses 331 <a 332 href="https://www.openhomefoundation.org/blog/making-our-web-analytics-open-source-with-plausible/" 333 rel="noopener" 334 >privacy-first analytics</a 335 > 336 to help us improve the site. You can view all data in our 337 <a 338 href="https://plausible.openhomefoundation.org/improv-wifi.com" 339 rel="noopener" 340 >public dashboard</a 341 >. 342 </div> 343 </div> 344 </div> 345 </body> 346</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.