<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[会飞的猪的小屋]]></title><description><![CDATA[哈喽~欢迎光临]]></description><link>https://blog.flyyingpiggy2020.cn</link><image><url>https://blog.flyyingpiggy2020.cn/innei.svg</url><title>会飞的猪的小屋</title><link>https://blog.flyyingpiggy2020.cn</link></image><generator>Shiro (https://github.com/Innei/Shiro)</generator><lastBuildDate>Mon, 25 May 2026 15:32:39 GMT</lastBuildDate><atom:link href="https://blog.flyyingpiggy2020.cn/feed" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 May 2026 15:32:39 GMT</pubDate><language><![CDATA[zh-CN]]></language><item><title><![CDATA[流式传输与帧传输]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/posts/other/streaming-and-frame-transmission">https://blog.flyyingpiggy2020.cn/posts/other/streaming-and-frame-transmission</a></blockquote><div><p>流式传输和帧传输有区别。</p><p>流式传输不适合用pingpong。</p><p>在USB CDC 中用了pingpong缓冲。</p><p>我没想到的是256字节会分为4包每包64字节传输（因为USB 的断点大小最多64的关系）</p><p>这个就导致了，CPU占用率低的时候，中间能来得及触发Read，看上去没有什么问题。</p><p>占用率搞的时候，多包中间没Read。直接数据丢失。</p></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/posts/other/streaming-and-frame-transmission#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/posts/other/streaming-and-frame-transmission</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/posts/other/streaming-and-frame-transmission</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Sat, 09 May 2026 00:30:47 GMT</pubDate></item><item><title><![CDATA[docker安装与使用]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/posts/smart_home/docker1">https://blog.flyyingpiggy2020.cn/posts/smart_home/docker1</a></blockquote><div><h1 id="dcoker">dcoker解决了什么问题？</h1><p>不同的软件需要不同的依赖，某些依赖会互相干扰。</p><p>---</p><h3 id="1--docker--compose-">1. 安装 Docker 和 Compose 插件</h3><pre class="language-bash lang-bash"><code class="language-bash lang-bash">sudo apt update
sudo apt install docker.io docker-compose-v2 -y
</code></pre><h3 id="2--docker-">2. 验证 Docker 是否安装成功</h3><p>输入：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">sudo docker ps
</code></pre><p>如果终端没有报错，而是打印出了 <code>CONTAINER ID   IMAGE   COMMAND...</code> 这样的表头，说明 Docker 已经运行</p><p>---</p><h3 id="4-ha">4. 安装HA</h3><p>既然 Docker 好了，我们现在就把 Home Assistant 和 MQTT 的配置文件写好，把它们跑起来。</p><p>依次输入：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash"># 创建一个文件夹专门放智能家居的配置
mkdir ~/smarthome
cd ~/smarthome

# 使用 nano 编辑器创建 docker-compose.yml 文件
nano docker-compose.yml
</code></pre><p>编写完对应的配置后，敲下启动命令：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">docker compose up -d
</code></pre><p>它会自动去拉取 HA 和 Mosquitto 的镜像。由于 HA 镜像比较大（大概1个多G），这里可能需要耐心等上几分钟到十几分钟，具体取决于你的网速。</p>
<p>国内给docker换源</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json &lt;&lt;-&#x27;EOF&#x27;
{
  &quot;registry-mirrors&quot;: [
    &quot;https://docker.m.daocloud.io&quot;,
    &quot;https://docker.nju.edu.cn&quot;,
    &quot;https://dockerproxy.com&quot;,
    &quot;https://hub-mirror.c.163.com&quot;
  ]
}
EOF// 代码
</code></pre>
<p>换好后重启</p>
<pre class="language-bash lang-bash"><code class="language-bash lang-bash">sudo systemctl daemon-reload
sudo systemctl restart docker

</code></pre></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/posts/smart_home/docker1#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/posts/smart_home/docker1</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/posts/smart_home/docker1</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Fri, 24 Apr 2026 07:37:46 GMT</pubDate></item><item><title><![CDATA[miniconda管理python环境]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/posts/smart_home/miniconda">https://blog.flyyingpiggy2020.cn/posts/smart_home/miniconda</a></blockquote><div><h3 id="1--miniconda-">1. 下载 Miniconda 安装脚本</h3><p>打开你的终端，根据你当前的设备选择对应的下载命令：</p><p><strong>如果你现在是在泰山派 (RK3576) 的板子上操作 (ARM64 架构)：</strong></p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O miniconda.sh
</code></pre>
<p><strong>如果你现在是在 Windows 的 WSL2 或纯粹的 PC 虚拟机里操作 (x86_64 架构)：</strong></p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
</code></pre>
<h3 id="2-">2. 运行安装程序</h3><p>下载完成后，执行以下命令开始安装：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">bash miniconda.sh
</code></pre>
<p><strong>安装过程中的关键交互提示（按顺序）：</strong></p><ol start="1"><li><strong><code>Please, press ENTER to continue</code></strong> -&gt; 按下<strong>回车键</strong>。</li><li>此时会显示长篇的许可协议。按住键盘上的<strong>空格键</strong>快速翻页，直到最底部。</li><li><strong><code>Do you accept the license terms? [yes|no]</code></strong> -&gt; 输入 <strong><code>yes</code></strong> 并回车。</li><li><strong><code>Miniconda3 will now be installed into this location...</code></strong> -&gt; 提示安装路径（默认是 <code>~/miniconda3</code>），直接按<strong>回车键</strong>确认。</li><li>等待进度条走完进行解压安装。</li><li><strong>⚠️ 最关键的一步：<code>Do you wish the installer to initialize Miniconda3 by running conda init? [yes|no]</code></strong> -&gt; 务必输入 <strong><code>yes</code></strong> 并回车。这会自动配置你的环境变量。</li></ol><h3 id="3-">3. 使环境变量生效</h3><p>安装完成后，刚才的配置需要你重新加载一下终端才能生效。你可以关掉终端重新打开，或者直接输入：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">source ~/.bashrc
</code></pre>
<h3 id="4-">4. 验证安装</h3><p>如果在命令行的最前面出现了一个 <code>(base)</code> 字样，说明 Conda 已经成功接管了。
你可以输入以下命令确认：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">conda --version
</code></pre><p>如果打印出版本号（例如 <code>conda 24.x.x</code>），就说明安装大功告成。</p><p>---
Miniconda 默认会在你每次打开终端时，自动进入 <code>(base)</code> 虚拟环境。
但是，作为搞硬件和底层开发的人，我们经常需要编译 C/C++ 代码（比如使用 <code>make</code>、<code>cmake</code> 或者交叉编译工具链）。Conda 的默认环境有时会拦截掉系统的自带编译器或者库，导致莫名其妙的编译报错。</p><p><strong>为了保证系统环境的干净，强烈建议关闭 Conda 的开机自启：</strong></p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">conda config --set auto_activate_base false
</code></pre><p>执行完之后，下次打开终端就不会再看到默认的 <code>(base)</code> 了。当你想写 Python 代码或启动网关服务时，再手动激活即可。</p><h3 id="-">🚀 日常使用速查手册</h3><p>准备好之后，你就可以随时为不同的项目创建独立的“无菌室”了。比如你要开发那个蓝牙网关：</p><ul><li><strong>创建新环境（例如指定 Python 3.10 版本）：</strong></li></ul><pre class="language-bash lang-bash"><code class="language-bash lang-bash">  conda create -n ble_gateway python=3.10
</code></pre><ul><li><strong>进入该环境：</strong>
<code>bash
conda activate ble_gateway
</code>
此时终端前缀会变成 <code>(ble_gateway)</code></li><li><strong>退出当前环境，回到系统原生环境：</strong>
<code>bash
conda deactivate
</code></li><li><strong>查看你创建了哪些环境：</strong>
<code>bash
conda env list
</code></li></ul></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/posts/smart_home/miniconda#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/posts/smart_home/miniconda</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/posts/smart_home/miniconda</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Fri, 24 Apr 2026 06:54:19 GMT</pubDate></item><item><title><![CDATA[WS2812B踩坑记录]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/posts/other/ws2812b">https://blog.flyyingpiggy2020.cn/posts/other/ws2812b</a></blockquote><div><p>驱动方式：定时器+DMA</p><p>现象：手一摸会闪烁</p><p>解决方法：IO设置为软件下拉</p></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/posts/other/ws2812b#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/posts/other/ws2812b</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/posts/other/ws2812b</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Thu, 23 Apr 2026 01:36:28 GMT</pubDate></item><item><title><![CDATA[回不去了]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/notes/20">https://blog.flyyingpiggy2020.cn/notes/20</a></blockquote><div><p>今天调试一个继电器电机。用了24年写的电机业务逻辑的代码框架。</p><p>回头看之前自己写的代码框架，感慨写的真TM好！真TM解耦合。</p><p>把它抽象出了inc，dec，stop而不关心底层电机类型。route_curr行程获取不关心旋变、磁编还是霍尔。</p><p>用的时候和大脑按摩一样，太顺滑了。</p><p>回头看目前用AI写的驱动，例如WB2812B，因为AI写的速度太快了，我很多代码没完全阅读过。明明是我让AI写的，但是里面的辅助函数我却看不懂什么意思了。再也没有那种对代码随心所欲掌控的感觉了。</p><p>古法编程的代码一去不复返了。</p></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/notes/20#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/notes/20</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/notes/20</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Fri, 17 Apr 2026 01:03:16 GMT</pubDate></item><item><title><![CDATA[放弃输出详细的文档]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/notes/19">https://blog.flyyingpiggy2020.cn/notes/19</a></blockquote><div><p>好久没更新博客了，在安富莱论坛里写过一篇《相轨迹法判断步态的导读》。</p><p>最近还看了一篇霍尔前馈加观测器的论文，但是懒得整理成文字了。</p><p>之前想用费曼学习法来巩固知识，目前信号与系统和自控部分看了差不多了。但是没有写博客了。感觉详细的写特别累。我不应该把文字的受众假定为零基础的，应该假定为一个月前的自己。</p><p>不再打算输出完整的某个系列的课程了，如果有自己不懂的知识点，写小文章来分享吧。未来如果有大片的空白时间，或者复习的时候再对它们做汇总。</p></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/notes/19#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/notes/19</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/notes/19</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Fri, 10 Apr 2026 02:56:42 GMT</pubDate></item><item><title><![CDATA[AI重构代码失败]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/notes/18">https://blog.flyyingpiggy2020.cn/notes/18</a></blockquote><div><p>今天让AI帮我重构代码。</p><p>我已经实现了功能里，让它重构后，我直接运行功能没了..</p><p>然后我现在自己古法编程手敲</p></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/notes/18#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/notes/18</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/notes/18</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Thu, 02 Apr 2026 06:41:10 GMT</pubDate></item><item><title><![CDATA[更新博客后台，无刷电机有感]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/notes/17">https://blog.flyyingpiggy2020.cn/notes/17</a></blockquote><div><p>如题所示本人更新了一下后台，但是貌似默认所有文章都开启了AI总结的功能，哪怕我并没有设置API。</p><p>另外在AI的帮助下，感觉对电机控制慢慢有了一定的理解了。</p></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/notes/17#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/notes/17</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/notes/17</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Mon, 09 Mar 2026 06:57:07 GMT</pubDate></item><item><title><![CDATA[最近闲下来了]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/notes/16">https://blog.flyyingpiggy2020.cn/notes/16</a></blockquote><div><p>换了公司之后，目前在一家很小的小公司上班了</p><p>大概花了三个月(12月到2月) 把手头上的项目嵌入式软件部分写完了（项目排期是到9月份完毕）</p><p>除去留给生产的时间，领导预计是4月份完成嵌入式软件功能部分。（注：领导只想完成功能）</p><p>我这算是大大提前了。</p><p>目前卡在OTA、产测部分代码。</p><p>由于人员紧张，OTA部分需要APP组同事协助我。（APP开发一个安卓板，和我的MCU用USB连接）</p><p>但是有一个更加紧急的项目在4月1号开发布会，所以年后的到4月为止，我们公司所有资源都为它服务。</p><p>而我一个人无法完成OTA和产测联调，只能先写好我这部分的。</p><p>所以我现在有好几个月的空闲时间。（上班摸鱼ing）</p></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/notes/16#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/notes/16</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/notes/16</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Fri, 27 Feb 2026 01:56:27 GMT</pubDate></item><item><title><![CDATA[极点为什么可以判断稳定性]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.flyyingpiggy2020.cn/posts/basic/pole_logic_e_pt_stability">https://blog.flyyingpiggy2020.cn/posts/basic/pole_logic_e_pt_stability</a></blockquote><div><h4 id="">第一步：什么是极点？</h4><p>假设一个系统的传递函数是 $G(s) = \frac{1}{s - p}$。这里的 $p$ 就是<strong>极点</strong>（让分母为 0 的点）。</p><h4 id="">第二步：回到时间轴（拉普拉斯逆变换）</h4><p>我们在数学上知道， $\frac{1}{s - p}$ 在时间域上对应的函数是 $e^{pt}$。</p><ul><li>这个 $e^{pt}$ 描述了系统受到扰动后，自己“乱动”的规律（天然反应）。</li></ul><h4 id="p">第三步：看p的正负（复平面的左与右）</h4><p>极点 $p$ 通常是一个复数，可以写成 $p = \sigma + j\omega$（ $\sigma$ 是实部， $\omega$ 是虚部）。那么：
 $e^{pt} = e^{(\sigma + j\omega)t} = \mathbf{e^{\sigma t}} \cdot e^{j\omega t}$</p><ul><li><p><strong>如果极点在左半平面 ( $\sigma &lt; 0$)：</strong>
 $e^{\sigma t}$ 是一个<strong>指数衰减</strong>项（例如 $e^{-2t}$）。随着时间 $t$ 变大，这个值会趋于 <strong>0</strong>。</p><ul><li><strong>结论：</strong> 扰动消失了，系统回到了平衡点 —— <strong>稳定</strong>。</li></ul></li><li><p><strong>如果极点在右半平面 ( $\sigma &gt; 0$)：</strong>
 $e^{\sigma t}$ 是一个<strong>指数爆炸</strong>项（例如 $e^{2t}$）。随着时间 $t$ 变大，这个值会趋于 <strong>无穷大</strong>。</p><ul><li><strong>结论：</strong> 扰动被无限放大，系统炸了 —— <strong>不稳定</strong>。</li></ul></li><li><p><strong>虚部 $\omega$ 是干什么的？</strong>
 $e^{j\omega t}$ 代表<strong>振荡</strong>（波浪线）。所以如果极点有虚部，系统就会一边衰减一边摆动。</p></li></ul></div><p style="text-align:right"><a href="https://blog.flyyingpiggy2020.cn/posts/basic/pole_logic_e_pt_stability#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.flyyingpiggy2020.cn/posts/basic/pole_logic_e_pt_stability</link><guid isPermaLink="true">https://blog.flyyingpiggy2020.cn/posts/basic/pole_logic_e_pt_stability</guid><dc:creator><![CDATA[Lu Xianfan]]></dc:creator><pubDate>Sat, 07 Feb 2026 02:18:15 GMT</pubDate></item></channel></rss>