<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Raspberry Pi Pico on 孤筝の温暖小家</title><link>https://www.guzhengsvt.cn/en/tags/raspberry-pi-pico/</link><description>Recent content from 孤筝の温暖小家</description><generator>Hugo</generator><language>en</language><managingEditor>lvbowen040427@163.com (孤筝)</managingEditor><webMaster>lvbowen040427@163.com (孤筝)</webMaster><copyright>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</copyright><lastBuildDate>Thu, 15 Feb 2024 11:44:33 +0800</lastBuildDate><atom:link href="https://www.guzhengsvt.cn/en/tags/raspberry-pi-pico/index.xml" rel="self" type="application/rss+xml"/><item><title>MicroPython Function Library</title><link>https://www.guzhengsvt.cn/en/post/code/micropython%E5%87%BD%E6%95%B0%E5%BA%93/</link><pubDate>Thu, 15 Feb 2024 11:44:33 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/code/micropython%E5%87%BD%E6%95%B0%E5%BA%93/</guid><description>
<![CDATA[<h1>MicroPython Function Library</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <h2 id="machine---hardware-related-functions">
<a class="header-anchor" href="#machine---hardware-related-functions"></a>
Machine - Hardware Related Functions
</h2><h3 id="pin-class">
<a class="header-anchor" href="#pin-class"></a>
Pin Class
</h3><h4 id="machinepinid-modenone-pullnone-value">
<a class="header-anchor" href="#machinepinid-modenone-pullnone-value"></a>
<code>machine.Pin(id, mode=None, pull=None, value)</code>
</h4><p>Pin object constructor</p>
<ul>
<li>id: GPIO number (0-29 for Pico)</li>
<li>mode: Pin mode, options: <code>None, Pin.IN(0), Pin.OUT(1), Pin.OPEN_DRAIN(2)</code></li>
<li>pull: Internal pull-up/down resistor (only valid in input mode), options: <code>None, Pin.PULL_UP(1), Pin.DOWN(2)</code></li>
<li>value: Port value in output or open-drain mode (0 for low, 1 for high)</li>
</ul>
<h4 id="pininitmodenone-pullnone">
<a class="header-anchor" href="#pininitmodenone-pullnone"></a>
<code>Pin.init(mode=None, pull=None)</code>
</h4><p>Reinitialize GPIO port</p>
<h4 id="pinvaluex">
<a class="header-anchor" href="#pinvaluex"></a>
<code>Pin.value([x])</code>
</h4><ul>
<li>Returns GPIO port value when no parameter is given</li>
<li>Writes value to GPIO port when parameter 0/1 is provided</li>
</ul>
<h4 id="pintoggle">
<a class="header-anchor" href="#pintoggle"></a>
<code>Pin.toggle()</code>
</h4><p>Toggles port state in output or open-drain mode</p>
<p>Example: LED blinking</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">machine</span> <span class="kn">import</span> <span class="n">Pin</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl"><span class="n">led</span> <span class="o">=</span> <span class="n">Pin</span><span class="p">(</span><span class="mi">25</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">led</span><span class="o">.</span><span class="n">toggle</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># Toggle LED every second</span>
</span></span></code></pre></div><h4 id="pinirqhandlernone-triggerpinirq_fallingpinirq_rising">
<a class="header-anchor" href="#pinirqhandlernone-triggerpinirq_fallingpinirq_rising"></a>
<code>Pin.irq(handler=None, trigger=(Pin.IRQ_FALLING|PIN.IRQ_RISING))</code>
</h4><p>External interrupt function</p>
<ul>
<li>handler: Callback function when interrupt triggers</li>
<li>trigger: Interrupt trigger condition (edge/level triggered)</li>
</ul>
<h4 id="other-functions">
<a class="header-anchor" href="#other-functions"></a>
Other Functions
</h4><p>For output/open-drain mode:</p>
<ul>
<li><code>Pin.low(), Pin.off()</code>: Set port to low voltage</li>
<li><code>Pin.high(), Pin.on()</code>: Set port to high voltage</li>
</ul>
<h4 id="example-led-control">
<a class="header-anchor" href="#example-led-control"></a>
Example: LED Control
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">machine</span> <span class="kn">import</span> <span class="n">Pin</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">utime</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Button on GPIO15, input mode with pull-up</span>
</span></span><span class="line"><span class="cl"><span class="n">button_num</span> <span class="o">=</span> <span class="mi">15</span>
</span></span><span class="line"><span class="cl"><span class="n">button</span> <span class="o">=</span> <span class="n">Pin</span><span class="p">(</span><span class="n">button_num</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">PULL_UP</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Onboard LED on GP25, external LED on GP16</span>
</span></span><span class="line"><span class="cl"><span class="n">led1_num</span> <span class="o">=</span> <span class="mi">25</span>
</span></span><span class="line"><span class="cl"><span class="n">led2_num</span> <span class="o">=</span> <span class="mi">16</span>
</span></span><span class="line"><span class="cl"><span class="n">led1</span> <span class="o">=</span> <span class="n">Pin</span><span class="p">(</span><span class="n">led1_num</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">led2</span> <span class="o">=</span> <span class="n">Pin</span><span class="p">(</span><span class="n">led2_num</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">led2</span><span class="o">.</span><span class="n">off</span><span class="p">()</span>  <span class="c1"># Turn off external LED</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">button</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>  <span class="c1"># Check if button pressed (0 when pressed)</span>
</span></span><span class="line"><span class="cl">        <span class="n">utime</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">button</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>  <span class="c1"># Software debounce</span>
</span></span><span class="line"><span class="cl">            <span class="n">led1</span><span class="o">.</span><span class="n">toggle</span><span class="p">()</span>  <span class="c1"># Toggle onboard LED</span>
</span></span><span class="line"><span class="cl">            <span class="n">led2</span><span class="o">.</span><span class="n">on</span><span class="p">()</span>  <span class="c1"># Turn on external LED (GP16 high)</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;The button is pressed.&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">while</span> <span class="n">button</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="c1"># Wait while button remains pressed (external LED stays on)</span>
</span></span><span class="line"><span class="cl">                <span class="n">utime</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span>
</span></span></code></pre></div><h3 id="pwm-class">
<a class="header-anchor" href="#pwm-class"></a>
PWM Class
</h3><h4 id="machinepwmpin">
<a class="header-anchor" href="#machinepwmpin"></a>
<code>machine.PWM(pin)</code>
</h4><p>Reinitialize specified GPIO as PWM output</p>
<ul>
<li>pin: Pin class object</li>
</ul>
<h4 id="pwmdeinit">
<a class="header-anchor" href="#pwmdeinit"></a>
<code>PWM.deinit()</code>
</h4><p>Deinitialize PWM, stop PWM output</p>
<h4 id="pwmfreqvalue">
<a class="header-anchor" href="#pwmfreqvalue"></a>
<code>PWM.freq([value])</code>
</h4><p>Set PWM frequency (in Hz), automatically calculates divider and TOP register values</p>
<h4 id="pwmduty_u16value">
<a class="header-anchor" href="#pwmduty_u16value"></a>
<code>PWM.duty_u16([value])</code>
</h4><p>Set duty cycle</p>
<ul>
<li>value: Duty cycle ratio [0,65536], calculates corresponding value for CC register</li>
</ul>
<h4 id="pwmduty_nsvalue">
<a class="header-anchor" href="#pwmduty_nsvalue"></a>
<code>PWM.duty_ns([value])</code>
</h4><p>Set high-level duration per cycle in nanoseconds</p>
<h4 id="example-breathing-led">
<a class="header-anchor" href="#example-breathing-led"></a>
Example: Breathing LED
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">machine</span> <span class="kn">import</span> <span class="n">Pin</span><span class="p">,</span> <span class="n">PWM</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">led</span> <span class="o">=</span> <span class="n">PWM</span><span class="p">(</span><span class="n">Pin</span><span class="p">(</span><span class="mi">25</span><span class="p">))</span>  <span class="c1"># Initialize onboard LED as PWM</span>
</span></span><span class="line"><span class="cl"><span class="n">led</span><span class="o">.</span><span class="n">freq</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span>  <span class="c1"># Set frequency</span>
</span></span><span class="line"><span class="cl"><span class="n">led_duty</span> <span class="o">=</span> <span class="mi">0</span>  <span class="c1"># Initial value</span>
</span></span><span class="line"><span class="cl"><span class="n">led_direction</span> <span class="o">=</span> <span class="mi">1</span>  <span class="c1"># Step size</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">led_duty</span> <span class="o">+=</span> <span class="n">led_direction</span>  <span class="c1"># Increase/decrease duty cycle</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">led_duty</span> <span class="o">&gt;=</span> <span class="mi">100</span><span class="p">:</span>  <span class="c1"># Max</span>
</span></span><span class="line"><span class="cl">        <span class="n">led_duty</span> <span class="o">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl">        <span class="n">led_direction</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">elif</span> <span class="n">led_duty</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>  <span class="c1"># Min</span>
</span></span><span class="line"><span class="cl">        <span class="n">led_duty</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">        <span class="n">led_direction</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">    <span class="n">led</span><span class="o">.</span><span class="n">duty_u16</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">led_duty</span> <span class="o">*</span> <span class="mf">655.36</span><span class="p">))</span>  <span class="c1"># Convert ratio to value</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">led_duty</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">led_duty</span><span class="p">)</span>  <span class="c1"># For monitoring</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># 2-second cycle</span>
</span></span></code></pre></div><h3 id="adc-class">
<a class="header-anchor" href="#adc-class"></a>
ADC Class
</h3><h4 id="machineadcid">
<a class="header-anchor" href="#machineadcid"></a>
<code>machine.ADC(id)</code>
</h4><p>Initialize as ADC object</p>
<ul>
<li>id: Can be GPIO or ADC channel (GPIO must support ADC when using Pin object)</li>
<li>Channels 0-3: Pico GPIO 26-29</li>
<li>Channel 4: Internal temperature sensor</li>
</ul>
<h4 id="adcread_u16">
<a class="header-anchor" href="#adcread_u16"></a>
<code>ADC.read_u16()</code>
</h4><p>Read ADC channel value [0,65525]</p>

        
        <hr><p>Published on 2024-02-15 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2024-02-15</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>Code</category></item></channel></rss>