blog/2024/11/25/利用Linux小主机和SDR搭建APRS-iGate/index.html

723 lines
38 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh">
<head>
<!-- 元数据 -->
<meta charset="utf-8">
<link rel="icon" href="https://2-cdn.ianxia.com/images/avatar/common.png">
<title>利用Linux小主机和SDR搭建APRS iGate | Code The World</title>
<meta name="author" content="Bigsk" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="robots" content="index,follow" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<meta name="format-detection" content="telphone=no, email=no" />
<meta name="keywords" content="技术" />
<meta name="description" content="导言APRS网络中的设备在通过无线电发送APRS信标后只有附近的设备才能接受到内容。而如果要接入到全球的APRS-IS网络分享自己的实时位置。则需要附近部署APRS iGate通俗地讲就是一个APRS的数据网关负责接收、解码、上传附近无线电波中的APRS数据包。 而APRS常用的频率144.640MHz属于VHF段受到建筑物遮挡的影响非常大看似近在咫尺的网关却因为一栋大楼的遮挡无法收到">
<meta property="og:type" content="article">
<meta property="og:title" content="利用Linux小主机和SDR搭建APRS iGate">
<meta property="og:url" content="https://blog.ianxia.com/2024/11/25/%E5%88%A9%E7%94%A8Linux%E5%B0%8F%E4%B8%BB%E6%9C%BA%E5%92%8CSDR%E6%90%AD%E5%BB%BAAPRS-iGate/index.html">
<meta property="og:site_name" content="Code The World">
<meta property="og:description" content="导言APRS网络中的设备在通过无线电发送APRS信标后只有附近的设备才能接受到内容。而如果要接入到全球的APRS-IS网络分享自己的实时位置。则需要附近部署APRS iGate通俗地讲就是一个APRS的数据网关负责接收、解码、上传附近无线电波中的APRS数据包。 而APRS常用的频率144.640MHz属于VHF段受到建筑物遮挡的影响非常大看似近在咫尺的网关却因为一栋大楼的遮挡无法收到">
<meta property="og:locale">
<meta property="og:image" content="https://2-cdn.ianxia.com/attachments/2024/11/25/v1.1.jpg">
<meta property="og:image" content="https://2-cdn.ianxia.com/attachments/2024/11/25/v1.3.jpg">
<meta property="article:published_time" content="2024-11-25T06:36:43.000Z">
<meta property="article:modified_time" content="2024-11-25T08:04:46.430Z">
<meta property="article:author" content="Bigsk">
<meta property="article:tag" content="技术">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://2-cdn.ianxia.com/attachments/2024/11/25/v1.1.jpg">
<!-- 站点验证相关 -->
<!-- 样式表文件 -->
<link rel="stylesheet" id="kratos-css" href="/css/kratosr.min.css" media="all"></script>
<link rel="stylesheet" id="darkmode-css" href="/css/kr-color-dark.min.css" media="(prefers-color-scheme: dark)"></script>
<script src="/js/kr-dark.min.js"></script>
<link rel="stylesheet" id="highlight-css" href="/css/highlight/night-eighties.min.css" media="all"></script>
<link rel="stylesheet" id="fontawe-css" href="/vendors/font-awesome@4.7.0/css/font-awesome.min.css" media="all"></script>
<link rel="stylesheet" id="nprogress-css" href="/vendors/nprogress@0.2.0/nprogress.css" media="all"></script>
<link rel="stylesheet" href="/vendors/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css"></script>
<!-- 不得不预先加载的一些JS文件 -->
<script src="/vendors/jquery@3.6.0/dist/jquery.min.js"></script>
<script src="/vendors/qrcode_js@1.0.0/qrcode.min.js"></script>
<style>
</style>
<meta name="generator" content="Hexo 6.3.0"></head>
<body class="custom-background">
<div id="kratos-wrapper">
<div id="kratos-page">
<div id="kratos-header">
<header id="kratos-desktop-topnav" class="kratos-topnav">
<div class="container">
<div class="nav-header">
<nav id="kratos-menu-wrap">
<ul id="kratos-primary-menu" class="sf-menu">
<li>
<a target="_blank" rel="noopener" href="https://www.ianxia.com">
<i class="fa fa-home"></i>
首页
</a>
</li>
<li>
<a target="_blank" rel="noopener" href="https://demo.ianxia.com">
<i class="fa fa-bug"></i>
DEMO
</a>
</li>
<li>
<a target="_blank" rel="noopener" href="https://adsb.ianxia.com">
<i class="fa fa-plane"></i>
ADS-B
</a>
</li>
<li>
<a target="_blank" rel="noopener" href="https://tools.ianxia.com">
<i class="fa fa-wrench"></i>
小工具
</a>
</li>
<li>
<a href="/">
<i class="fa fa-cubes"></i>
博客
</a>
</li>
<li>
<a href="/links">
<i class="fa fa-link"></i>
友情链接
</a>
</li>
</ul>
</nav>
</div>
</div>
</header>
<header id="kratos-mobile-topnav" class="kratos-topnav">
<div class="container">
<div class="color-logo"><a href="/">Code The World</a></div>
<div class="nav-toggle">
<a class="kratos-nav-toggle js-kratos-nav-toggle">
<i></i>
</a>
</div>
</div>
</header>
</div>
<div class="kratos-start kratos-hero-2">
<!-- <div class="kratos-overlay"></div> -->
<div class="kratos-cover kratos-cover-2 text-center">
<div class="desc desc2 animate-box">
<a href="/">
<h2>Code The World</h2> <br />
<span>Codice est quasi poem a.</span>
</a>
</div>
</div>
</div>
<div id="kratos-blog-post">
<div class="container">
<div id="main" class="row">
<section class="col-md-8">
<article itemscope itemtype="https://schema.org/Article">
<link itemprop="mainEntityOfPage" href="https://blog.ianxia.com/2024/11/25/%E5%88%A9%E7%94%A8Linux%E5%B0%8F%E4%B8%BB%E6%9C%BA%E5%92%8CSDR%E6%90%AD%E5%BB%BAAPRS-iGate/">
<div class="kratos-hentry kratos-post-inner clearfix">
<header class="kratos-entry-header">
<h1 class="kratos-entry-title text-center" itemprop="name headline">利用Linux小主机和SDR搭建APRS iGate</h1>
<ul class="kratos-post-meta text-center">
<li><time datetime="2024-11-25T06:36:43.000Z" itemprop="datePublished"><i class="fa fa-calendar"></i> 2024-11-25</time></li>
<li itemprop="author" itemscope itemtype="https://schema.org/Person">
<i class="fa fa-user"></i> 作者 <span itemprop="name">Bigsk</span>
</li>
<li>
<i class="fa fa-edit"></i>
~4.26K
</li>
</ul>
</header>
<div class="kratos-post-content">
<div id="expire-alert" class="alert alert-warning hidden" role="alert">
<div class="icon"><i class="fa fa-warning"></i></div>
<div class="text"><p>本文最后编辑于 <time datetime="1732521886430"></time> 前,其中的内容可能需要更新。</p></div>
</div>
<hr />
<div itemprop="articleBody"><h2 id="导言"><a href="#导言" class="headerlink" title="导言"></a>导言</h2><p>APRS网络中的设备在通过无线电发送APRS信标后只有附近的设备才能接受到内容。<br>而如果要接入到全球的APRS-IS网络分享自己的实时位置。<br>则需要附近部署APRS iGate通俗地讲就是一个APRS的数据网关负责接收、解码、上传附近无线电波中的APRS数据包。</p>
<p>而APRS常用的频率144.640MHz属于VHF段受到建筑物遮挡的影响非常大看似近在咫尺的网关却因为一栋大楼的遮挡无法收到你的信标。<br>所以我们要积极部署更多的iGate才能在城市中达到更好的效果。<br>而正常的iGate设备价格常常不菲故想到利用便宜的SDR+大量洋垃圾Linux小主机来搭建自己的iGate。</p>
<h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="准备措施"><a href="#准备措施" class="headerlink" title="准备措施"></a>准备措施</h3><h4 id="一、准备硬件"><a href="#一、准备硬件" class="headerlink" title="一、准备硬件"></a>一、准备硬件</h4><p>博主测试了以下两种方案:</p>
<ol>
<li>玩客云Onecloud30元+ RTL2832u&#x2F;FC0012 SDR60元</li>
<li>树莓派1B60元+ RTL2832u&#x2F;FC0012 SDR60元</li>
</ol>
<p>此处更推荐使用玩客云,成本更低,运行稳定,性能更高,缺点是需要一定的动手能力来刷写系统。<br>因树莓派刷写系统过于简单本文不做介绍只对Onecloud的刷写系统步骤做教程。</p>
<p>其中SDR目前有以下几种架构方案</p>
<table>
<thead>
<tr>
<th>调谐芯片厂家型号</th>
<th>频率范围</th>
<th>备注</th>
</tr>
</thead>
<tbody><tr>
<td>Elonic E4000</td>
<td>52-2200MHz</td>
<td>已停产</td>
</tr>
<tr>
<td>Rafael Micro R820T2</td>
<td>24-1766MHz</td>
<td>已停产,常见为蓝色电视棒</td>
</tr>
<tr>
<td>Refeal Micro R828D</td>
<td>24-1766MHz</td>
<td>与R820T2同构常见为RTL-SDR Blog V4</td>
</tr>
<tr>
<td>Refeal Micro R860</td>
<td>24-1766MHz</td>
<td>与R828D同构</td>
</tr>
<tr>
<td>Fitipower FC0013</td>
<td>22-1100MHz</td>
<td></td>
</tr>
<tr>
<td>Fitipower FC0012</td>
<td>22-948.6MHz</td>
<td>便宜,常见为黑色电视棒<br/>很多奸商当820T2卖</td>
</tr>
<tr>
<td>FlipChip International FC 2580</td>
<td>146-308MHz</td>
<td></td>
</tr>
</tbody></table>
<p>对于搭建APRS iGate推荐购买Fitipower FC0012调谐器的SDR成本会更低廉。<br>如要购买其他方案请注意留意对应的频率范围必须包含当地的APRS频率到工作频率范围内。</p>
<p>天线可以自信选购,注意对应波段的增益性能,增益越高效果越好。<br>比较廉价的固定天线方案是吸盘+HH-509F车载玻璃钢顶配配置Diamond X510。<br>而使用手台天线可以考虑RH770拉杆天线V段增益也来到了3dBi相当不错。<br>注意大部分SDR使用的天线接口为MCX例如电视棒可能需要购买MCX-SMA或MCX-UHF的转接头&#x2F;转接馈线。</p>
<h4 id="二、安装系统"><a href="#二、安装系统" class="headerlink" title="二、安装系统"></a>二、安装系统</h4><p>准备一把镊子一条USB公对公或TypeC对TypeA的数据线前提是你的电脑有C口没错C口接电脑</p>
<p>下载好以下文件资料:</p>
<ol>
<li>Armbian镜像 <a target="_blank" rel="noopener" href="https://github.com/muzihuaner/armbian-onecloud/releases">GitHub下载</a></li>
<li>Amlogic USB Burning Tool <a target="_blank" rel="noopener" href="https://androidmtk.com/download-amlogic-usb-burning-tool">下载</a></li>
</ol>
<p>打开刷写工具选择下载好的Armbian镜像我这里下载的镜像是Armbian-unofficial_24.5.0-trunk_Onecloud_jammy_current_6.6.21_minimal.burn。<br>给玩客云断电拆开外壳将USB一头连接到电脑一头连接到远离网口的USB口利用镊子短接对应的触电插电开机。<br>直到听到电脑响起有设备接入的提示音后放开镊子点击软件的开始刷写然后等待完成断开USB线断电重启即可。</p>
<p>短接要求:</p>
<p>V1.1<br><img src="https://2-cdn.ianxia.com/attachments/2024/11/25/v1.1.jpg" alt="V1.1"></p>
<p>V1.3:<br><img src="https://2-cdn.ianxia.com/attachments/2024/11/25/v1.3.jpg" alt="V1.3"></p>
<h4 id="三、安装软件"><a href="#三、安装软件" class="headerlink" title="三、安装软件"></a>三、安装软件</h4><p>SSH链接主机请使用ROOT用户进行以下的操作。</p>
<ol>
<li>安装基础环境:</li>
</ol>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"># 更新软件包</span><br><span class="line">apt update</span><br><span class="line"># 安装软件</span><br><span class="line">apt install git build-essential cmake automake libasound2-dev libudev-dev alsa-utils -y</span><br></pre></td></tr></table></figure>
<ol start="2">
<li>安装RTL-SDR软件</li>
</ol>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install libusb-1.0-0-dev rtl-sdr -y</span><br></pre></td></tr></table></figure>
<ol start="3">
<li>拉取Direwolf软件源代码并编译</li>
</ol>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">cd ~</span><br><span class="line"># 从GitHub拉取代码</span><br><span class="line">git clone https://www.github.com/wb2osz/direwolf</span><br><span class="line"># 如果连不上GitHub可以从我的镜像拉取</span><br><span class="line">#git clone https://git.ghink.net/Mirrors/direwolf</span><br><span class="line">cd direwolf</span><br><span class="line">mkdir build</span><br><span class="line">cd build</span><br><span class="line">cmake -DUNITTEST=1 ..</span><br><span class="line">make -j4</span><br><span class="line">make test</span><br><span class="line">make install</span><br><span class="line">make install-conf</span><br></pre></td></tr></table></figure>
<p>请静待编译完成玩客云大概需要20分钟树莓派1B大概在1个小时左右</p>
<ol start="4">
<li>创建配置文件</li>
</ol>
<p><code>nano /root/direwolf.conf</code></p>
<p>输入以下内容:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"># 输入设备监听UDP的7355端口这样比较省资源且不会出现报错情况。</span><br><span class="line"># 输出设备因为APRS网关只接收信标不发射所以没有输出设备null即是空。</span><br><span class="line">ADEVICE udp:7355 null</span><br><span class="line"># 呼号及SSID10代表互联网网关设备。</span><br><span class="line">MYCALL BD8CMN-10</span><br><span class="line"># APRS-IS服务器使用APRS.ICU提供的国内节点可以自己改成别的</span><br><span class="line">IGSERVER china.aprs.icu</span><br><span class="line"># APRS-IS认证呼号-SSID及Passcode可去tools.ianxia.com生成。</span><br><span class="line">IGLOGIN BD8CMN-10 XXXXX</span><br><span class="line"># 网关自身信标让其他人知道你的APRS iGate处于工作状态。</span><br><span class="line"># every为自身信标上报间隔时间lat和long为经纬度comment为说明信息。</span><br><span class="line">PBEACON sendto=IG delay=1 every=1 symbol=/r lat=30.61999N long=120.57413E freq=&quot;&quot; comment=&quot;Tongxiang APRS iGate 144.390MHz&quot;</span><br></pre></td></tr></table></figure>
<p>Ctrl+O回保存Ctrl+X退出</p>
<ol start="5">
<li>SDR频偏ppm值测量</li>
</ol>
<p><code>rtl_test -p</code></p>
<p>执行命令后等待10分钟以上等晶振工作温度稳定时输出的“cumulative PPM”值会趋于恒定此时就可得出SDR的频偏值。</p>
<ol start="6">
<li>测试运行</li>
</ol>
<p>将SDR插入小主机并运行如下命令</p>
<p><code>rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -</code></p>
<p>命令原理就是rtl_fm监听144.640MHz频点25是以上测得的频偏ppm值根据实际填写,<br>并将收到的信号用管道符传递给DirewolfDirewolf通过配置文件direwolf.conf中的规则将解码后的信标内容上传至APRS-IS服务器。<br>确认无报错后按Ctrl+C结束命令运行。</p>
<ol start="7">
<li>创建黑名单文件</li>
</ol>
<p><code>nano /etc/modprobe.d/rtlsdr.conf</code></p>
<p>写入下列信息:</p>
<p><code>blacklist dvb_usb_rtl28xxu</code></p>
<p>Ctrl+O回保存Ctrl+X退出</p>
<ol start="8">
<li>创建开机启动</li>
</ol>
<p>部分新的Linux系统没有rc.local文件了不用管先用编辑器尝试修改</p>
<p><code>nano /etc/rc.local</code></p>
<p>如果显示是创建新文件说明是新版本Linux先不用管写入以下信息</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#!/bin/sh -e</span><br><span class="line">#</span><br><span class="line"># rc.local</span><br><span class="line">#</span><br><span class="line"># This script is executed at the end of each multiuser runlevel.</span><br><span class="line"># Make sure that the script will &quot;exit 0&quot; on success or any other</span><br><span class="line"># value on error.</span><br><span class="line">#</span><br><span class="line"># In order to enable or disable this script just change the execution</span><br><span class="line"># bits.</span><br><span class="line">#</span><br><span class="line"># By default this script does nothing.</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -&amp;</span><br><span class="line">exit 0</span><br></pre></td></tr></table></figure>
<p>如果文件已经存在内容,只写入以下内容:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -&amp;</span><br><span class="line">exit 0</span><br></pre></td></tr></table></figure>
<p>注意,启动命令中的参数请自行修改成上述测试命令中的自己的参数。</p>
<p>Ctrl+O回保存Ctrl+X退出</p>
<p>为其赋予运行权限:</p>
<p><code>chmod +x /etc/rc.local</code></p>
<p>如果上述文件是新创建的,请接着看,否则重启你的设备,网关就已经搭建好了。</p>
<p>接下来我们创建系统服务:</p>
<p><code>vim /etc/systemd/system/rc-local.service</code></p>
<p>写入以下内容:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">[Unit]</span><br><span class="line"> Description=/etc/rc.local Compatibility</span><br><span class="line"> ConditionPathExists=/etc/rc.local</span><br><span class="line"></span><br><span class="line">[Service]</span><br><span class="line"> Type=forking</span><br><span class="line"> ExecStart=/etc/rc.local start</span><br><span class="line"> TimeoutSec=0</span><br><span class="line"> StandardOutput=tty</span><br><span class="line"> RemainAfterExit=yes</span><br><span class="line"> SysVStartPriority=99</span><br><span class="line"></span><br><span class="line">[Install]</span><br><span class="line"> WantedBy=multi-user.target</span><br></pre></td></tr></table></figure>
<p>按ESC:wq回车保存退出</p>
<p>激活服务:</p>
<p><code>systemctl enable rc-local.service</code></p>
<p>启动服务:</p>
<p><code>systemctl start rc-local.service</code></p>
<p>大功告成!可以用以下命令查看运行输出:</p>
<p><code>systemctl status rc-local.service</code></p>
<p>END</p>
<h3 id="可以在追踪网站上搜索-BD8CMN-10-查看博主方案效果"><a href="#可以在追踪网站上搜索-BD8CMN-10-查看博主方案效果" class="headerlink" title="可以在追踪网站上搜索 BD8CMN-10 查看博主方案效果"></a>可以在追踪网站上搜索 BD8CMN-10 查看博主方案效果</h3></div>
</div>
<div class="kratos-copyright text-center clearfix">
<h5 itemprop="copyrightNotice">本作品采用 <a rel="license nofollow" target="_blank" href="https://creativecommons.org/licenses/by-sa/4.0/">知识共享署名-相同方式共享 4.0 国际许可协议</a> 进行许可</h5>
</div>
<footer class="kratos-entry-footer clearfix">
<div class="post-like-donate text-center clearfix" id="post-like-donate">
<a class="share" href="javascript:;"><i class="fa fa-share-alt"></i> 分享</a>
<div class="share-wrap" style="display: none;">
<div class="share-group">
<a href="javascript:;" class="share-plain qq" onclick="share('qq');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-qq"></i>
</div>
</a>
<a href="javascript:;" class="share-plain qzone" onclick="share('qzone');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-star"></i>
</div>
</a>
<a href="javascript:;" class="share-plain weixin pop style-plain" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-weixin"></i>
</div>
<div class="share-int">
<div class="qrcode" id="wechat-qr"></div>
<p>打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮</p>
</div>
</a>
<a href="javascript:;" class="share-plain weibo" onclick="share('weibo');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-weibo"></i>
</div>
</a>
<a href="javascript:;" class="share-plain facebook style-plain" onclick="share('facebook');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-facebook"></i>
</div>
</a>
<a href="javascript:;" class="share-plain twitter style-plain" onclick="share('twitter');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-twitter"></i>
</div>
</a>
</div>
<script type="text/javascript">
$(()=>{
new QRCode("wechat-qr", {
text: "https://blog.ianxia.com/2024/11/25/%E5%88%A9%E7%94%A8Linux%E5%B0%8F%E4%B8%BB%E6%9C%BA%E5%92%8CSDR%E6%90%AD%E5%BB%BAAPRS-iGate/",
width: 150,
height: 150,
correctLevel : QRCode.CorrectLevel.H
});
});
function share(dest) {
const qqBase = "https://connect.qq.com/widget/shareqq/index.html?";
const weiboBase = "https://service.weibo.com/share/share.php?";
const qzoneBase = "https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?";
const facebookBase = "https://www.facebook.com/sharer/sharer.php?";
const twitterBase = "https://twitter.com/intent/tweet?";
const hostUrl = "https://blog.ianxia.com/2024/11/25/%E5%88%A9%E7%94%A8Linux%E5%B0%8F%E4%B8%BB%E6%9C%BA%E5%92%8CSDR%E6%90%AD%E5%BB%BAAPRS-iGate/";
const title = "「利用Linux小主机和SDR搭建APRS iGate」";
const excerpt = `导言APRS网络中的设备在通过无线电发送APRS信标后只有附近的设备才能接受到内容。而如果要接入到全球的APRS-IS网络分享自己的实时位置。则需要附近部署APRS iGate通俗地讲就是一个APRS的数据网关负责接收、解码、...`;
let _URL;
switch (dest) {
case "qq" : _URL = qqBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy"; break;
case "weibo" : _URL = weiboBase+"url="+hostUrl+"&title="+title+excerpt; break;
case "qzone" : _URL = qzoneBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy"; break;
case "facebook" : _URL = facebookBase+"u="+hostUrl; break;
case "twitter" : _URL = twitterBase+"text="+title+excerpt+"&url="+hostUrl; break;
}
window.open(_URL);
};
</script>
</div>
</div>
<div class="footer-tag clearfix">
<div class="pull-left">
<i class="fa fa-tags"></i>
<a class="tag-none-link" href="/tags/%E6%8A%80%E6%9C%AF/" rel="tag">技术</a>
</div>
<div class="pull-date">
<time datetime="2024-11-25T08:04:46.430Z" itemprop="dateModified">最后编辑2024-11-25</time>
</div>
</div>
</footer>
</div>
<nav class="navigation post-navigation clearfix" role="navigation">
<div class="nav-previous clearfix">
<a title=" Python证书链出问题导致的模块全部报错" href="/2024/10/30/Python证书链出问题导致的模块全部报错/">&lt; 上一篇</a>
</div>
</nav>
</article>
</section>
<section id="kratos-widget-area" class="col-md-4 hidden-xs hidden-sm">
<!-- 文章和页面根据splitter来分割没有的话就从头开始设置为sticky -->
<aside id="krw-about" class="widget widget-kratos-about clearfix">
<div class="photo-background"></div>
<div class="photo-wrapper clearfix">
<div class="photo-wrapper-tip text-center">
<img class="about-photo" src="https://2-cdn.ianxia.com/images/avatar/common.png" loading="lazy" decoding="auto" />
</div>
</div>
<div class="textwidget">
<p class="text-center">Codice est quasi poem a.</p>
</div>
<div class="site-meta">
<a class="meta-item" href="/archives/">
<span class="title">
文章
</span>
<span class="count">
25
</span>
</a>
<a class="meta-item" href="/categories/">
<span class="title">
分类
</span>
<span class="count">
3
</span>
</a>
<a class="meta-item" href="/tags/">
<span class="title">
标签
</span>
<span class="count">
3
</span>
</a>
</div>
</aside>
<div class="sticky-area">
<aside id="krw-categories" class="widget widget-kratos-categories clearfix">
<h4 class="widget-title"><i class="fa fa-folder"></i>分类目录</h4>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%8A%80%E6%9C%AF/">技术</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%91%84%E5%BD%B1/">摄影</a><span class="category-list-count">7</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E6%BA%90/">资源</a><span class="category-list-count">2</span></li></ul>
</aside>
<aside id="krw-tags" class="widget widget-kratos-tags clearfix">
<h4 class="widget-title"><i class="fa fa-tags"></i>标签聚合</h4>
<div class="tag-clouds">
<a href="/tags/%E6%8A%80%E6%9C%AF/" style="font-size: 0.8em;">技术</a> <a href="/tags/%E6%91%84%E5%BD%B1/" style="font-size: 0.7em;">摄影</a> <a href="/tags/%E8%B5%84%E6%BA%90/" style="font-size: 0.6em;">资源</a>
</div>
</aside>
<aside id="krw-posts" class="widget widget-kratos-posts">
<h4 class="widget-title"><i class="fa fa-file"></i>最新文章</h4>
<div class="tab-content">
<ul class="list-group">
<a class="list-group-item" href="/2024/11/25/%E5%88%A9%E7%94%A8Linux%E5%B0%8F%E4%B8%BB%E6%9C%BA%E5%92%8CSDR%E6%90%AD%E5%BB%BAAPRS-iGate/"><i class="fa fa-book"></i> 利用Linux小主机和SDR搭建APRS iGate</a>
<a class="list-group-item" href="/2024/10/30/Python%E8%AF%81%E4%B9%A6%E9%93%BE%E5%87%BA%E9%97%AE%E9%A2%98%E5%AF%BC%E8%87%B4%E7%9A%84%E6%A8%A1%E5%9D%97%E5%85%A8%E9%83%A8%E6%8A%A5%E9%94%99/"><i class="fa fa-book"></i> Python证书链出问题导致的模块全部报错</a>
<a class="list-group-item" href="/2024/10/09/Mac%E5%AE%89%E8%A3%85%E8%BD%AF%E4%BB%B6%E6%97%B6%E6%8F%90%E7%A4%BA%E5%B7%B2%E6%8D%9F%E5%9D%8F%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/"><i class="fa fa-book"></i> Mac安装软件时提示已损坏的解决办法</a>
<a class="list-group-item" href="/2023/07/18/%E6%91%84%E5%BD%B1%E4%BD%9C%E5%93%81-Field/"><i class="fa fa-book"></i> 摄影作品Field</a>
<a class="list-group-item" href="/2023/02/25/Python-%E4%B8%AD%E5%85%B3%E4%BA%8E-round-%E5%87%BD%E6%95%B0%E7%9A%84%E5%B0%8F%E5%9D%91/"><i class="fa fa-book"></i> Python 中关于 round 函数的小坑</a>
</ul>
</div>
</aside>
</div>
</section>
</div>
</div>
</div>
<footer>
<div id="footer" >
<div class="container">
<div class="row">
<div class="col-md-6 col-md-offset-3 footer-list text-center">
<ul class="kratos-social-icons">
<!-- Keep for compatibility -->
<!-- New links -->
</ul>
<ul class="kratos-copyright">
<div>
<li>&copy; 2024 Bigsk 版权所有.</li><br>
<li>本站已运行<span id="span_dt">Loading...</span></li><br>
<li>本站支持 IPv6 访问</li><br>
</div>
<!--
<div>
</div>
<div>
</div>
-->
<div><br><br></div>
</ul>
</div>
</div>
</div>
<div class="kr-tool text-center">
<div class="tool">
<div class="box search-box">
<a href="/search/">
<span class="fa fa-search"></span>
</a>
</div>
<div class="box theme-box" id="darkmode-switch">
<span class="fa fa-adjust"></span>
</div>
</div>
<div class="box gotop-box">
<span class="fa fa-chevron-up"></span>
</div>
</div>
</div>
</footer>
</div>
</div>
<script defer src="/vendors/bootstrap@3.3.4/dist/js/bootstrap.min.js"></script>
<script defer src="/vendors/nprogress@0.2.0/nprogress.js"></script>
<script>
if (!window.kr) {
window.kr = {};
}
window.kr.notMobile = (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)));
window.kr.siteRoot = "/";
</script>
<script async src="/js/candy.min.js"></script>
<script defer src="/vendors/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
<script defer src="/js/kratosr.min.js"></script>
<script defer src="/js/pjax.min.js"></script>
<!-- Extra support for third-party plguins -->
</body>
</html>