Site updated at 2016-08-22 08:21:42 UTC
This commit is contained in:
parent
f9d65cbe57
commit
4acb07bf8e
559 changed files with 18878 additions and 21688 deletions
|
@ -87,13 +87,13 @@
|
|||
<div class="meta clearfix">
|
||||
<time datetime="2016-07-28T04:00:00+00:00" pubdate data-updated="true"><i class="icon-calendar"></i> July 28, 2016</time>
|
||||
<span class="byline author vcard"><i class='icon-user'></i> Fabian Affolter</span>
|
||||
<span><i class='icon-time'></i> five minutes reading time</span>
|
||||
<span><i class='icon-time'></i> six minutes reading time</span>
|
||||
<span>
|
||||
<i class="icon-tags"></i>
|
||||
<ul class="tags unstyled">
|
||||
|
||||
|
||||
<li><a class='category' href='/blog/categories/how-to/'>How-To</a></li>
|
||||
<li>How-To</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
@ -108,7 +108,7 @@
|
|||
</header>
|
||||
|
||||
|
||||
<p><img src="/images/blog/2016-07-micropython/micropython.png" style="clear: right; border:none; box-shadow: none; float: right; margin-bottom: 12px;" width="200" /><br />
|
||||
<p><img src="/images/blog/2016-07-micropython/micropython.png" style="clear: right; border:none; box-shadow: none; float: right; margin-bottom: 12px;" width="200" />
|
||||
The first release of Micropython for ESP8266 was delivered a couple of weeks ago. The <a href="http://docs.micropython.org/en/latest/esp8266/esp8266_contents.html">documentation</a> covers a lot of ground. This post is providing only a little summary which should get you started.</p>
|
||||
|
||||
<p>Until a couple of weeks ago, the pre-built MicroPython binary for the ESP8266 was only available to backers. This has changed now and it is available to the public for <a href="https://micropython.org/download/#esp8266">download</a>.</p>
|
||||
|
@ -117,47 +117,41 @@ The first release of Micropython for ESP8266 was delivered a couple of weeks ago
|
|||
|
||||
<p>The easiest way is to use <a href="https://github.com/themadinventor/esptool">esptool.py</a> for firmware handling tasks. First erase the flash:</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre>$ sudo python esptool.py --port /dev/ttyUSB0 erase_flash
|
||||
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>sudo python esptool.py --port /dev/ttyUSB0 erase_flash
|
||||
esptool.py v1.0.2-dev
|
||||
Connecting...
|
||||
Erasing flash (this may take a while)...
|
||||
</pre></div>
|
||||
</div>
|
||||
Erasing flash <span class="o">(</span>this may take a <span class="k">while</span><span class="o">)</span>...
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>and then load the firmware. You may adjust the file name of the firmware binary.</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre>$ sudo python esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 esp8266-2016-07-10-v1.8.2.bin
|
||||
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>sudo python esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size<span class="o">=</span>8m 0 esp8266-2016-07-10-v1.8.2.bin
|
||||
esptool.py v1.2-dev
|
||||
Connecting...
|
||||
Running Cesanta flasher stub...
|
||||
Flash params set to 0x0020
|
||||
Writing 540672 @ 0x0... 540672 (100 %)
|
||||
Wrote 540672 bytes at 0x0 in 13.1 seconds (330.8 kbit/s)...
|
||||
Flash params <span class="nb">set </span>to 0x0020
|
||||
Writing 540672 @ 0x0... 540672 <span class="o">(</span>100 %<span class="o">)</span>
|
||||
Wrote 540672 bytes at 0x0 <span class="k">in </span>13.1 seconds <span class="o">(</span>330.8 kbit/s<span class="o">)</span>...
|
||||
Leaving...
|
||||
</pre></div>
|
||||
</div>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>Now reset the device. You should then be able to use the <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/repl.html#getting-a-micropython-repl-prompt">REPL (Read Evaluate Print Loop)</a>. On Linux there is <code>minicom</code> or <code>picocom</code>, on a Mac you can use <code>screen</code> (eg. <code>screen /dev/tty.SLAB_USBtoUART 115200</code>), and on Windows there is Putty to open a serial connection and get the REPL prompt.</p>
|
||||
<p>Now reset the device. You should then be able to use the <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/repl.html#getting-a-micropython-repl-prompt">REPL (Read Evaluate Print Loop)</a>. On Linux there is <code class="highlighter-rouge">minicom</code> or <code class="highlighter-rouge">picocom</code>, on a Mac you can use <code class="highlighter-rouge">screen</code> (eg. <code class="highlighter-rouge">screen /dev/tty.SLAB_USBtoUART 115200</code>), and on Windows there is Putty to open a serial connection and get the REPL prompt.</p>
|
||||
|
||||
<p>The <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/repl.html#webrepl-a-prompt-over-wifi">WebREPL</a> work over a wireless connection and allows easy access to a prompt in your browser. An instance of the WebREPL client is hosted at <a href="http://micropython.org/webrepl">http://micropython.org/webrepl</a>. Alternatively, you can create a local clone of their <a href="https://github.com/micropython/webrepl">GitHub repository</a>. This is neccessary if your want to use the command-line tool <code>webrepl_cli.py</code> which is mentionend later in this post.</p>
|
||||
<p>The <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/repl.html#webrepl-a-prompt-over-wifi">WebREPL</a> work over a wireless connection and allows easy access to a prompt in your browser. An instance of the WebREPL client is hosted at <a href="http://micropython.org/webrepl">http://micropython.org/webrepl</a>. Alternatively, you can create a local clone of their <a href="https://github.com/micropython/webrepl">GitHub repository</a>. This is neccessary if your want to use the command-line tool <code class="highlighter-rouge">webrepl_cli.py</code> which is mentionend later in this post.</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre>$ sudo minicom -D /dev/ttyUSB0
|
||||
#4 ets_task(4020e374, 29, 3fff70e8, 10)
|
||||
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>sudo minicom -D /dev/ttyUSB0
|
||||
<span class="c">#4 ets_task(4020e374, 29, 3fff70e8, 10) </span>
|
||||
WebREPL daemon started on ws://192.168.4.1:8266
|
||||
Started webrepl in setup mode
|
||||
could not open file 'main.py' for reading
|
||||
Started webrepl <span class="k">in </span>setup mode
|
||||
could not open file <span class="s1">'main.py'</span> <span class="k">for </span>reading
|
||||
|
||||
#5 ets_task(4010035c, 3, 3fff6360, 4)
|
||||
<span class="c">#5 ets_task(4010035c, 3, 3fff6360, 4)</span>
|
||||
MicroPython v1.8.2-9-g805c2b9 on 2016-07-10; ESP module with ESP8266
|
||||
Type "help()" for more information.
|
||||
>>>
|
||||
</pre></div>
|
||||
</div>
|
||||
Type <span class="s2">"help()"</span> <span class="k">for </span>more information.
|
||||
<span class="gp">>>> </span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p class="note">
|
||||
|
@ -166,116 +160,104 @@ The public build of the firmware may be different than the firmware distributed
|
|||
|
||||
<p>Connect a LED to pin 5 (or another pin of your choosing) to check if the ESP8266 is working as expected.</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre>>>> <span class="keyword">import</span> <span class="include">machine</span>
|
||||
>>> pin = machine.Pin(<span class="integer">5</span>, machine.Pin.OUT)
|
||||
>>> pin.high()
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="o">>>></span> <span class="kn">import</span> <span class="nn">machine</span>
|
||||
<span class="o">>>></span> <span class="n">pin</span> <span class="o">=</span> <span class="n">machine</span><span class="o">.</span><span class="n">Pin</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">machine</span><span class="o">.</span><span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">)</span>
|
||||
<span class="o">>>></span> <span class="n">pin</span><span class="o">.</span><span class="n">high</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>You can toogle the LED by changing its state with <code>pin.high()</code> and <code>pin.low()</code>.</p>
|
||||
<p>You can toogle the LED by changing its state with <code class="highlighter-rouge">pin.high()</code> and <code class="highlighter-rouge">pin.low()</code>.</p>
|
||||
|
||||
<p>Various ESP8266 development board are shipped with an onboard photocell or a light dependent resistors (LDR) connected to the analog pin of your ESP8266 check if you are able to obtain a value.</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre>>>> <span class="keyword">import</span> <span class="include">machine</span>
|
||||
>>> brightness = machine.ADC(<span class="integer">0</span>)
|
||||
>>> brightness.read()
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="o">>>></span> <span class="kn">import</span> <span class="nn">machine</span>
|
||||
<span class="o">>>></span> <span class="n">brightness</span> <span class="o">=</span> <span class="n">machine</span><span class="o">.</span><span class="n">ADC</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="o">>>></span> <span class="n">brightness</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>Make sure that you are familiar with REPL and WebREPL because this will be needed soon. Keep in mind the password for the WebREPL access.</p>
|
||||
|
||||
<p>Read the <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/network_basics.html">instructions</a> about how to setup your wireless connection. Basically you need to upload a <code>boot.py</code> file to the microcontroller and this file is taking care of the connection setup. Below you find a sample which is more or less the same as shown in the <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/network_basics.html#configuration-of-the-wifi">documentation</a>.</p>
|
||||
<p>Read the <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/network_basics.html">instructions</a> about how to setup your wireless connection. Basically you need to upload a <code class="highlighter-rouge">boot.py</code> file to the microcontroller and this file is taking care of the connection setup. Below you find a sample which is more or less the same as shown in the <a href="http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/network_basics.html#configuration-of-the-wifi">documentation</a>.</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre><span class="keyword">def</span> <span class="function">do_connect</span>():
|
||||
<span class="keyword">import</span> <span class="include">network</span>
|
||||
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="k">def</span> <span class="nf">do_connect</span><span class="p">():</span>
|
||||
<span class="kn">import</span> <span class="nn">network</span>
|
||||
|
||||
SSID = <span class="string"><span class="delimiter">'</span><span class="content">SSID</span><span class="delimiter">'</span></span>
|
||||
PASSWORD = <span class="string"><span class="delimiter">'</span><span class="content">PASSWORD</span><span class="delimiter">'</span></span>
|
||||
<span class="n">SSID</span> <span class="o">=</span> <span class="s">'SSID'</span>
|
||||
<span class="n">PASSWORD</span> <span class="o">=</span> <span class="s">'PASSWORD'</span>
|
||||
|
||||
sta_if = network.WLAN(network.STA_IF)
|
||||
ap_if = network.WLAN(network.AP_IF)
|
||||
<span class="keyword">if</span> ap_if.active():
|
||||
ap_if.active(<span class="predefined-constant">False</span>)
|
||||
<span class="keyword">if</span> <span class="keyword">not</span> sta_if.isconnected():
|
||||
print(<span class="string"><span class="delimiter">'</span><span class="content">connecting to network...</span><span class="delimiter">'</span></span>)
|
||||
sta_if.active(<span class="predefined-constant">True</span>)
|
||||
sta_if.connect(SSID, PASSWORD)
|
||||
<span class="keyword">while</span> <span class="keyword">not</span> sta_if.isconnected():
|
||||
<span class="keyword">pass</span>
|
||||
print(<span class="string"><span class="delimiter">'</span><span class="content">Network configuration:</span><span class="delimiter">'</span></span>, sta_if.ifconfig())
|
||||
</pre></div>
|
||||
</div>
|
||||
<span class="n">sta_if</span> <span class="o">=</span> <span class="n">network</span><span class="o">.</span><span class="n">WLAN</span><span class="p">(</span><span class="n">network</span><span class="o">.</span><span class="n">STA_IF</span><span class="p">)</span>
|
||||
<span class="n">ap_if</span> <span class="o">=</span> <span class="n">network</span><span class="o">.</span><span class="n">WLAN</span><span class="p">(</span><span class="n">network</span><span class="o">.</span><span class="n">AP_IF</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">ap_if</span><span class="o">.</span><span class="n">active</span><span class="p">():</span>
|
||||
<span class="n">ap_if</span><span class="o">.</span><span class="n">active</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">sta_if</span><span class="o">.</span><span class="n">isconnected</span><span class="p">():</span>
|
||||
<span class="k">print</span><span class="p">(</span><span class="s">'connecting to network...'</span><span class="p">)</span>
|
||||
<span class="n">sta_if</span><span class="o">.</span><span class="n">active</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="n">sta_if</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">SSID</span><span class="p">,</span> <span class="n">PASSWORD</span><span class="p">)</span>
|
||||
<span class="k">while</span> <span class="ow">not</span> <span class="n">sta_if</span><span class="o">.</span><span class="n">isconnected</span><span class="p">():</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">print</span><span class="p">(</span><span class="s">'Network configuration:'</span><span class="p">,</span> <span class="n">sta_if</span><span class="o">.</span><span class="n">ifconfig</span><span class="p">())</span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>Upload this file with <code>webrepl_cli.py</code> or the WebREPL:</p>
|
||||
<p>Upload this file with <code class="highlighter-rouge">webrepl_cli.py</code> or the WebREPL:</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre>$ python webrepl_cli.py boot.py 192.168.4.1:/boot.py
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>python webrepl_cli.py boot.py 192.168.4.1:/boot.py
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>If you reboot, you should see your current IP address in the terminal.</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre>>>> Network configuration: ('192.168.0.10', '255.255.255.0', '192.168.0.1', '192.168.0.1')
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">>>> </span>Network configuration: <span class="o">(</span><span class="s1">'192.168.0.10'</span>, <span class="s1">'255.255.255.0'</span>, <span class="s1">'192.168.0.1'</span>, <span class="s1">'192.168.0.1'</span><span class="o">)</span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>First let’s create a little consumer for Home Assistant sensor’s state. The code to place in <code>main.py</code> is a mixture of code from above and the <a href="/developers/rest_api/">RESTful API</a> of Home Assistant. If the temperature in the kitchen is higher than 20 °C then the LED connected to pin 5 is switched on.</p>
|
||||
<p>First let’s create a little consumer for Home Assistant sensor’s state. The code to place in <code class="highlighter-rouge">main.py</code> is a mixture of code from above and the <a href="/developers/rest_api/">RESTful API</a> of Home Assistant. If the temperature in the kitchen is higher than 20 °C then the LED connected to pin 5 is switched on.</p>
|
||||
|
||||
<p class="note">
|
||||
If a module is missing then you need to download is it from <a href="https://github.com/micropython/micropython-lib">MicroPython Library overview</a> and upload it to the ESP8266 with <code>webrepl_cli.py</code> manually.
|
||||
If a module is missing then you need to download is it from <a href="https://github.com/micropython/micropython-lib">MicroPython Library overview</a> and upload it to the ESP8266 with <code class="highlighter-rouge">webrepl_cli.py</code> manually.
|
||||
</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre><span class="comment"># Sample code to request the state of a Home Assistant entity.</span>
|
||||
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="c"># Sample code to request the state of a Home Assistant entity.</span>
|
||||
|
||||
API_PASSWORD = <span class="string"><span class="delimiter">'</span><span class="content">YOUR_PASSWORD</span><span class="delimiter">'</span></span>
|
||||
URL = <span class="string"><span class="delimiter">'</span><span class="content">http://192.168.0.5:8123/api/states/</span><span class="delimiter">'</span></span>
|
||||
ENTITY = <span class="string"><span class="delimiter">'</span><span class="content">sensor.kitchen_temperature</span><span class="delimiter">'</span></span>
|
||||
TIMEOUT = <span class="integer">30</span>
|
||||
PIN = <span class="integer">5</span>
|
||||
<span class="n">API_PASSWORD</span> <span class="o">=</span> <span class="s">'YOUR_PASSWORD'</span>
|
||||
<span class="n">URL</span> <span class="o">=</span> <span class="s">'http://192.168.0.5:8123/api/states/'</span>
|
||||
<span class="n">ENTITY</span> <span class="o">=</span> <span class="s">'sensor.kitchen_temperature'</span>
|
||||
<span class="n">TIMEOUT</span> <span class="o">=</span> <span class="mi">30</span>
|
||||
<span class="n">PIN</span> <span class="o">=</span> <span class="mi">5</span>
|
||||
|
||||
<span class="keyword">def</span> <span class="function">get_data</span>():
|
||||
<span class="keyword">import</span> <span class="include">urequests</span>
|
||||
url = <span class="string"><span class="delimiter">'</span><span class="content">{}{}</span><span class="delimiter">'</span></span>.format(URL, ENTITY)
|
||||
headers = {<span class="string"><span class="delimiter">'</span><span class="content">x-ha-access</span><span class="delimiter">'</span></span>: API_PASSWORD,
|
||||
<span class="string"><span class="delimiter">'</span><span class="content">content-type</span><span class="delimiter">'</span></span>: <span class="string"><span class="delimiter">'</span><span class="content">application/json</span><span class="delimiter">'</span></span>}
|
||||
resp = urequests.get(URL, headers=headers)
|
||||
<span class="keyword">return</span> resp.json()[<span class="string"><span class="delimiter">'</span><span class="content">state</span><span class="delimiter">'</span></span>]
|
||||
<span class="k">def</span> <span class="nf">get_data</span><span class="p">():</span>
|
||||
<span class="kn">import</span> <span class="nn">urequests</span>
|
||||
<span class="n">url</span> <span class="o">=</span> <span class="s">'{}{}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">URL</span><span class="p">,</span> <span class="n">ENTITY</span><span class="p">)</span>
|
||||
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'x-ha-access'</span><span class="p">:</span> <span class="n">API_PASSWORD</span><span class="p">,</span>
|
||||
<span class="s">'content-type'</span><span class="p">:</span> <span class="s">'application/json'</span><span class="p">}</span>
|
||||
<span class="n">resp</span> <span class="o">=</span> <span class="n">urequests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">URL</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">resp</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s">'state'</span><span class="p">]</span>
|
||||
|
||||
<span class="keyword">def</span> <span class="function">main</span>():
|
||||
<span class="keyword">import</span> <span class="include">machine</span>
|
||||
<span class="keyword">import</span> <span class="include">time</span>
|
||||
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
|
||||
<span class="kn">import</span> <span class="nn">machine</span>
|
||||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
|
||||
pin = machine.Pin(PIN, machine.Pin.OUT)
|
||||
<span class="keyword">while</span> <span class="predefined-constant">True</span>:
|
||||
<span class="keyword">try</span>:
|
||||
<span class="keyword">if</span> <span class="predefined">int</span>(get_data()) >= <span class="integer">20</span>:
|
||||
pin.high()
|
||||
<span class="keyword">else</span>:
|
||||
pin.low()
|
||||
<span class="keyword">except</span> <span class="exception">TypeError</span>:
|
||||
<span class="keyword">pass</span>
|
||||
time.sleep(TIMEOUT)
|
||||
<span class="n">pin</span> <span class="o">=</span> <span class="n">machine</span><span class="o">.</span><span class="n">Pin</span><span class="p">(</span><span class="n">PIN</span><span class="p">,</span> <span class="n">machine</span><span class="o">.</span><span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">)</span>
|
||||
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">get_data</span><span class="p">())</span> <span class="o">>=</span> <span class="mi">20</span><span class="p">:</span>
|
||||
<span class="n">pin</span><span class="o">.</span><span class="n">high</span><span class="p">()</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">pin</span><span class="o">.</span><span class="n">low</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="nb">TypeError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">TIMEOUT</span><span class="p">)</span>
|
||||
|
||||
<span class="keyword">if</span> __name__ == <span class="string"><span class="delimiter">'</span><span class="content">__main__</span><span class="delimiter">'</span></span>:
|
||||
print(<span class="string"><span class="delimiter">'</span><span class="content">Get the state of {}</span><span class="delimiter">'</span></span>.format(ENTITY))
|
||||
main()
|
||||
</pre></div>
|
||||
</div>
|
||||
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
|
||||
<span class="k">print</span><span class="p">(</span><span class="s">'Get the state of {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ENTITY</span><span class="p">))</span>
|
||||
<span class="n">main</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>Upload <code>main.py</code> the same way as <code>boot.py</code>. After a reboot (<code>>>> import machine</code> and <code>>>> machine.reboot()</code>) or power-cycling your physical notifier is ready.</p>
|
||||
<p>Upload <code class="highlighter-rouge">main.py</code> the same way as <code class="highlighter-rouge">boot.py</code>. After a reboot (<code class="highlighter-rouge">>>> import machine</code> and <code class="highlighter-rouge">>>> machine.reboot()</code>) or power-cycling your physical notifier is ready.</p>
|
||||
|
||||
<p>If you run into trouble, press “Ctrl+c” in the REPL to stop the execution of the code, enter <code>>>> import webrepl</code> and <code>>>> webrepl.start()</code>, and upload your fixed file.</p>
|
||||
<p>If you run into trouble, press “Ctrl+c” in the REPL to stop the execution of the code, enter <code class="highlighter-rouge">>>> import webrepl</code> and <code class="highlighter-rouge">>>> webrepl.start()</code>, and upload your fixed file.</p>
|
||||
</article>
|
||||
|
||||
|
||||
|
@ -349,7 +331,7 @@ PIN = <span class="integer">5</span>
|
|||
|
||||
|
||||
<li class="post">
|
||||
<a href="/blog/2016/08/13/foursquare-fast-com-ffmpeg-gpsd/">0.26: Foursquare, Fast.com, FFMPEG and GPSD</a>
|
||||
<a href="/blog/2016/08/13/foursquare-fast.com-ffmpeg-gpsd/">0.26: Foursquare, Fast.com, FFMPEG and GPSD</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue