Lexsion 发布的文章

PGP加密电子邮件通信——使用Thunderbird搭配内置OpenPGP收发加密邮件

前言

The natural flow of technology tends to move in the direction of making surveillance easier,

the ability of computers to track us doubles every eighteen months.

----Phil Zimmermann

众所周知,通过互联网传输的的数据很容易被第三方监听和篡改。而我们发送电子邮件时,其数据会通过运营商线路发送到发件人邮件服务提供商的服务器,由服务商的服务器将电子邮件投递到收件人邮箱对应服务商的服务器,最终收件人从服务器上接收邮件。虽然目前绝大多数服务商支持传输过程的TLS加密,这基本杜绝传输中的泄密。但是,邮件原文仍会在双方邮件服务提供商的服务器上留存,这里留下了泄密的风险。如果有一种方案,在发件方发送前本地加密,收件方收到后本地解密,这样就避免了传输过程泄密和篡改。那么如何实现呢?

PGP(Pretty Good Privacy)中文可以翻译成:很不错的隐私。它是一种加密程序,可以为数据通信提供加密和身份验证。PGP可以用于对文本、邮件或文件进行签名、加密和解密。菲尔·齐默尔曼(Phil Zimmermann) 于1991年开发了PGP的最初版本,其最初用户为集权国家持不同政见者、民权主义者和密码朋克的“自由交流”活动家。PGP发布不久,便在美国以外的地方被使用。1993年齐默尔曼被美国政府以“无证出售军火”调查,因为当时美国法律规定大于40位密钥的密码系统被视为"军火",而PGP从未使用低于128位的密钥。菲尔·齐默尔曼以富有想象力的方式挑战了这些规定,他将PGP的源代码通过写成一本书出版了。因为枪支弹药、飞机和软件的出口被限制,但书籍的出口受第一修正案保护。几年后,调查以没有提起任何诉讼而结束。

联邦刑事调查结束后,菲尔·齐默尔曼和他的团队成立了一家公司开发PGP。PGP在随后的几年辗转倒手几家公司,作为一个商业软件,它遇到了一些专利问题,这导致它的使用遇到很多问题。而菲尔·齐默尔曼深信,PGP加密的开放标准对他们和整个加密社区都至关重要。后来IETF应其要求便成立了OpenPGP工作组。后来自由软件基金会开发了一个兼容OpenPGP标准的程序,称为GNU Privacy Guard,简称GnuPG或GPG。

可能有人注意到,在当下,某些对于信息安全比较注意的博主,或是独立调查记者、社会活动家。他们的个人网站电子邮箱附近会留有一个PGP KEY,其后跟着一个40位16进制数。这个数字实际是PGP公钥的指纹,通过它可以在公共PGP公钥分发服务器上找到其对应的完整公钥。有了PGP公钥,我们便可以向其发送加密后的电子邮件了,电子邮件在到达对方的邮件客户端前的整个传送过程,一直都是密文。而除非窃听者获取了对方的私钥,否则无法获取到原文。

Thunderbird是一款开源免费的电子邮件客户端,用于发送,接收和存储电子邮件,分别支持Windows、MacOS、Linux等平台。它目前由开源社区负责维护,它被PRISM BREAK项目所推荐。之前它需要搭配Enigmail插件使用OpenPGP加密,目前Thunderbird 78 原生支持两种加密标准,OpenPGP 和 S/MIME,所以不再需要插件。官方文档描述,Thunderbird 78 OpenPGP标准支持是通过RNP实现的。

实践本文内容前,您可能需要知晓以下内容:

  • 准备一个电子邮件账户,需要服务提供商支持IMAP或POP3协议

  • 如果对安全要求较高,需确认当前系统无恶意软件

  • 如果对数据安全要求极高,建议全盘加密

本文描述的方法用于避免传输过程中邮件内容被窥探,用于证明发件人身份。对于发送前的内容泄密、私钥泄露等皆无力应对;且随着技术发展,此方法并非能够永远安全,请谨慎。

1. 安装Thunderbird并配置邮件账户

  1. Thunderbird的安装非常简单。大多Linux发行版都默认安装了它。而在Windows下的安装也非常简单,只需要从官方网站下载适合您语言和系统的安装程序,然后运行安装程序跟随提示安装即可。如果需要修改安装位置可以选择自定义,然后修改安装位置,其他不再赘述。

  2. 安装完成后运行Thunderbird,会提示您配置邮件账户。如果您关闭了这个窗口,可以点击菜单键(其在主窗口关闭下方,图标是三根横线,下文简称三横菜单键),在菜单中点击新建 > 已有电子邮件账户... ,打开邮件账户配置窗口。
    1-0.png

  3. 按提示填写发件时显示的名字,电子邮件账户地址,密码,然后点击 继续

    1-1.png

  4. Thunderbird会自带尝试检索邮件服务器配置信息,如果找到,会自动在下方列出。如果检查到的信息与您实际情况相同,可以直接点击 完成 按钮,完成电子邮件账户的添加。

    1-2.png

  5. 如果找不到,或找到的配置信息不正确,您可以点击 手动配置(M)... 按钮,手动填写从邮件服务商处获得的服务器信息。填写无误后点击 完成 按钮,完成电子邮件账户的添加。

    1-3.png

警告:请确保以上配置中“接收”和“发出”均配置了SSL(安全套接字层)或STARTTLS(启动传输层安全性),这保证您与电子邮件服务商的网络连接是加密的。

注意:如果您电脑系统登录的是公用账户,请不要勾选记住密码。为了数据安全,不建议在公用账户做加密邮件通信。详细参考该官方文档

注意:某些邮箱,例如网易邮箱、Gmail,可能不再支持使用网页登录的密码连接POP和IMAP服务,需要在网页端按提示生成专用的连接密码。

2. 生成并配置密钥

配置好电子邮件账户后,接下来便是通过内置的OpenPGP密钥管理器生成密钥对。

  1. 在主界面点击三横菜单键 > 账户设置 ,在左侧您的邮箱下的选项中选择 端到端加密 ,在右侧界面的OpenPGP栏目中点击 OpenPGP密钥管理器(K) 按钮以打开OpenPGP密钥管理器。(密钥管理器 也可以从 三横菜单键 > 工具中访问)

    2-1.png

  2. 点击上方菜单栏中的 生成(G) > 生成新密钥对(K) ,弹出的新建OpenPGP个人密钥窗口。在身份标识处选择您使用的邮箱。密钥到期日建议选择到期时间2年或3年,不建议设置永不过期。密钥类型选择RSA,密钥大小选择4096,点击 生成密钥 按钮,在接下来的页面中会询问您是否确定生成,核对无误点击确定等待片刻即可生成密钥对。

    2-2.png

  3. 关闭密钥管理器,此时应该能够在OpenPGP栏目中看到新添加的密钥。点击选中新添加的密钥,即可将该密钥对应用于此电子邮件账户。

    2-3.png

可选安全配置:为了更高的安全性,有以下可选项设置,但以下设置会导致易用性下降。

  • 禁用远程内容。这个设置在选项 > 隐私与安全 中 ,允许消息中的远程内容,此选项默认设置就是不启用的。关闭此选项可在一定程度上降低邮件远程内容加载项带来的攻击风险。
  • 禁用HTML电邮呈现。打开 三横菜单 ,点击 查看 > 消息体为(这个翻译太草了) ,此处默认是原始HTML,将其设置为 纯文本 可以更大程度上避免HTML加载项导致的黑客攻击,但会导致大量HTML格式的邮件呈现为几乎不可读的状态。建议只在安全要求极高的情况下使用。
  • 禁用HTML电邮撰写。此设置在账户设置 > 通讯录选项 下 。编写以HTML格式编写消息 默认为勾选状态。如果要使用纯文本方式撰写邮件,需要把此勾选去掉。
  • 启用默认签名与加密。此设置在 账户设置 > 端到端加密 下。将 发送消息时的默认设置 改为 默认要求加密 ,勾选默认添加我的数字签名。这个设置可以避免忘记加密将邮件发出。但会给平时不发送加密邮件的场景带来麻烦,按需启用。
  • 将草稿和模板保存在本地。此设置在 账户设置 > 副本和文件夹 下,将草稿和模板的保存文件夹设置在本地,而不是邮箱的远程文件夹中,这可避免未完成的、未加密的草稿被自动上传至邮件服务商处,此设置按需配置。

导出私钥:

导出私钥备份到安全的地方可以降低意外导致私钥丢失的情况。私钥丢失将导致您无法解密他人发送给您的加密邮件,这也是一件令人尴尬的事情。同时,Thunderbird中自带的OpenPGP密钥管理器功能有限,后续的发布操作也需要导出到GnuPG完成。

运行Thunderbird,三横菜单键 > 工具 > OpenPGP密钥管理器。在密钥管理器中选定要导出的项目,然后点击 文件 > 备份私钥为文件 。在弹出的窗口设置保存的位置与文件名称后点击保存,然后在弹出的设置密码窗口中设置密码,最后点击确定完成导出。

2-4.png

注意:此处生成的密钥对包含私钥和公钥。私钥需要安全保存,绝对不共享给其他人。公钥您可以公开分享给信任你的人。具体的使用会在后面的内容中讲述。

3. 加密邮件的发送和接收

要实现加密邮件双向收发,需要双方分别拥有自己的密钥对,并且互相持有对方公钥。这需要一个交换的过程,通常可以将公钥导出,作为附件发送给对方。然后通过电话、线下见面等方式核对公钥的指纹,确保对方收到的公钥没有问题。以下假设Alice和Bob两人要交换公钥。

  1. Alice打开OpenPGP密钥管理器,在自己的密钥对上右击,选择 将密钥导出为文件 ,选择合适的地方保存,这就是导出的PGP公钥。Alice给Bob发送一个未经PGP加密的邮件,将刚才导出的PGP公钥作为附件发送。此步骤可简化为:Alice打开OpenPGP密钥管理器,在自己的密钥对上右击,选择 通过电子邮件发送公钥

    3-1.png

    在弹出的邮件撰写窗口中填写Bob的邮件地址并完善标题与正文内容,确定安全选项下为不加密,点击发送即可。

    3-1-1.png

  2. Bob收到邮件后,下载附件中Alice的公钥。打开OpenPGP密钥管理器,点击 文件> 从文件导入公钥 ,选择Alice的公钥。在弹出的要导入下列密钥吗?的窗口中会显示当前导入公钥的指纹,通过其他可信途径与Alice核实指纹是否正确,核对无误后选择 接受 ,然后点击确定。在新弹出的成功信息页上点击 查看详细信息并管理密钥接受度 ,在 您是否接受 选项下选择 接受,我已验证这的确是正确的指纹 ,点击确定键完成设置,然后关闭密钥管理器。

    3-2.png

    3-2-1.png

  3. Bob完成Alice公钥的导入后,打开OpenPGP密钥管理器,在自己的密钥对上右击,选择 通过电子邮件发送公钥 ,在弹出的邮件撰写窗口中填写Alice的邮件地址并完善标题与正文内容,点击 安全 右边的下拉按钮,选择 要求加密 选项,点击发送即可将公钥和邮件以加密的方式完成发送。而加密后的内容只有Alice的私钥能够解密。

  4. Alice收到邮件后,Thunderbird会自动使用Alice的私钥解密邮件内容。Alice下载附件中Bob的公钥,参考步骤2的过程将Bob的公钥导入自己的OpenPGP密钥管理器。到此双方便可以互相发送加密邮件了。结果如下图所示。

    3-4.png

还有一种方法是将公钥发布到公钥服务器上,然后双方通过可信的途径交换公钥的指纹。让对方通过指纹或密钥ID来搜索并获取公钥。然后添加时核对指纹,如果没有差异即表示正确的交换了公钥。如何将公钥发布到公钥服务器会在后面内容中讲述。

4. 延长过期密钥

若要延长过期的密钥,在密钥管理器窗口中选择过期的密钥对,右键菜单选择 密钥属性 ,然后在打开的窗口中点击更改到期时间,重新设置到期时间(建议2~3年),密钥对会被更新。之后需要重新与通信伙伴们分享公钥。如果有在公钥服务器上发布,则需要重新发布以更新。

4-1.png

注:该部分笔者没有实际尝试操作,仅供参考。

5. 公钥发布与吊销

上文内容已经实现了PGP加密邮件通信。此处研究一下通过公共密钥服务器发布自己的公钥。这个活单纯靠Thunderbird搞不定,因为它没有这样的功能。为此,我们需要安装一个GnuPGP软件包,因为本文环境为Windows系统,所以需要下载安装Gpg4win。然后使用它将公钥发布到公钥服务器上。

安装Gpgwin:

  1. 从官网下载Gpg4win安装程序,双击运行安装程序,点击 下一步

    5-1.png

  2. 按需要从可选组件中选择要安装的组件,Kleopatra是一个窗口化的密钥管理器,GPA是GNU隐私助理,GpgOL是Outlook插件,GpgEX是资源管理器插件。本文只用到了Kleopatra的部分功能,还有部分操作用命令行淦。选择需要的功能后点击下一步。

    5-2.png

  3. 设置安装位置,建议默认位置即可。然后点击安装,等待其完成安装后退出安装程序。

    5-3.png

导入密钥对到GnuPG:

从Thunderbird中导出的私钥文件,在Gnu PG的图形化前端Kleopatra中进行导入。导入后加解密一段任意文本,以触发并完成私钥本身的解密流程。这是一个方法,如果安装了Kleopatra。否则我们也可以在命令提示符中完成。

  1. 使用以下命令进入备份目录(本例为E:\Sec\TEST\),并执行导入。会弹出一个输入密码的对话框,输入之前从Thunderbird中导出时设置的密码,然后点击OK完成导入。

    C:\Users\Lexsion>E:
    E:\>cd Sec\TEST
    E:\Sec\TEST>gpg --import Alice-secret.asc

    如图:

    5-B-1.png

    成功后有类似以下提示:

    gpg: key FFFFFFFFFFFFFFFF: "Alice <Alice@Alice.com>" imported
    gpg: key FFFFFFFFFFFFFFFF: secret key imported
    gpg: Total number processed: 1
    gpg:               imported: 1
    gpg:       secret keys read: 1
    gpg:   secret keys imported: 1
  2. 使用以下命令查看有哪些密钥,记下我们刚导入的密钥对的8位密钥ID,即指纹的后8位(本例为:67A7B3D5)。

    E:\Sec\TEST>gpg --list-keys

    部分缩写介绍:

    sec => 'SECret key'
    ssb => 'Secret SuBkey'
    pub => 'PUBlic key'
    sub => 'public SUBkey'
  3. 使用以下命令结合刚才获取到的指纹ID编辑密钥对,将信任等级改为完全信任。完成后退出。

    E:\Sec\TEST>gpg --edit-key 67A7B3D5
    gpg> trust
    
    Your decision? 5
    Do you really want to set this key to ultimate trust? (y/N) y
    
    gpg> quit

    如图:

    5-B-2.png

    5-B-3.png

编辑状态时,usage标记的解释:

Constant           Character      Explanation
─────────────────────────────────────────────────────
PUBKEY_USAGE_SIG      S       key is good for signing
PUBKEY_USAGE_CERT     C       key is good for certifying other signatures
PUBKEY_USAGE_ENC      E       key is good for encryption
PUBKEY_USAGE_AUTH     A       key is good for authentication

发布公钥到公共服务器:

我们仍假设8位公钥ID是“67A7B3D5”,使用以下命令将公钥发布到公共服务器“keys.gnupg.net”。您也可用发布到其他的服务器,主要的公共密钥服务器之间会定期互相同步的。

 gpg --keyserver keys.gnugp.net --send-keys "8D253E8A"

稍等片刻,我们可以尝试用以下命令查询服务器中是否已经有我们的密钥。

gpg --keyserver keys.gnugp.net --search-keys "user-name/e-mail/fingerprint"

撤销公钥:

公钥一旦发布到了公共的公钥服务器上,那便谁都可以获得了。如果哪天我们私钥丢失,无法解密;或是私钥泄露,不再安全怎么办?我们便需要一种机制,可以用来声明公钥已经失效,让大家不要再使用。于是便有撤销公钥的操作,原理便是用私钥签一个公钥回收证书,加入到原有的密钥链中。注意:为了更大程度保证此操作可用,公钥回收证书建议在发布公钥前导出,妥善保管,若需要撤销公钥时直接导入,避免丢失公钥,无法生成撤销证书。

使用以下命令生成回收证书,revoke.asc为文件名,文件会放在当前操作目录。

gpg --output revoke.asc --gen-revoke "8D253E8A" 

使用以下命令将公钥回收证书导入到公钥中。这个操作将在本地撤销公钥,使本地的公钥状态变成已失效(revoked) 。但不会影响已上传到公钥服务器中的数据。

gpg --import revoke.asc

使用以下命令搜索公钥服务器,以确定是否有这个公钥。

gpg --keyserver keys.gnugp.net --search-keys "8D253E8A"

确定服务端有这个公钥的记录之后,使用以下命令上传导入了回收证书的公钥,这样便更新了服务器上的记录。

gpg --keyserver keys.gnugp.net --send "8D253E8A"

稍后我们再使用前面的命令从公共公钥服务器上搜索,便会看到公钥的状态变成了(revoked)。以上即完成了公钥的撤销。

Q&A:

Q:PGP、OpenPGP、GnuPG、GPG、Gpg4win分别是什么,它们有什么关系?

A:相关的问题在前言中有部分提到,PGP是这项技术最早的开发者针对加密程序的命名,目前它是个商业软件,属于赛门铁克(Symantec)。OpenPGP是这项技术的标准,它是商业运作PGP过程中发现专利问题后为了更好发展提出的开放标准。GnuPG全称GNU Privacy Guard,它是自由软件基金会开发的一个兼容OpenPGP标准的程序,其又简称GPG,它是PGP的开源替代品。Gpg4win是一个Microsoft Windows下的软件包,其包含GnuPG核心程序、证书管理器和加密插件。除了OpenPGP作为技术标准名称,其他都是软件名称,他们几乎通用,但支持的加密算法会有不同。

Q:公钥、私钥、指纹、密钥ID分别是什么?

A:公钥用来加密和验证签名,私钥用来解密和签名。指纹是从公钥产生,长度为40位16进制数。密钥ID是公钥的ID,分为长ID和短ID两种,长ID是指纹的后16位,短ID是指纹的后8位。长短ID仅作为方便搜索使用,交换、使用公钥时务必完整核对指纹,避免碰撞攻击。

Q:导出的PGP私钥文件是否包含公钥?

A:导出的PGP私钥文件是包含公钥的,如果你尝试将导出的私钥在其他设备上导入,导入后便能看到其包含公钥。另外,可以使用pgpdump分析私钥文件来研究这个问题。

Q:私钥导出时要求我设置了密码,但是导入时没有提示输入密码就成功导入了?

A:导出私钥时设置的密码是有用的,私钥确实使用您设置的密码加密了。部分GnuPG公钥管理器是这么设计的,导入操作本身是不需要密码的,但是导入后的私钥仍在加密状态,这个状态的私钥是不能使用的。可以使用这个私钥解密一个文件,其会自动提示让您输入之前设置的密码以解锁私钥。本文使用的命令界面操作,没有遇到此问题。

Q:据说其他新的加密算法更加优秀,为什么还要用RSA?

A:为了保证更好的兼容性,所以还是建议选RSA。

Q:POP3和IMAP有什么区别,怎么选择?

A:POP3和IMAP是两种不同的协议,相比IMAP,POP3是一种简单协议。POP3协议将邮件移动到本地,尽管服务商处可以设置将消息保留在服务器上。而IMAP协议是访问、操作远程服务器上的文件夹,下载到本地的被称为副本。IMAP客户端可以对远程服务端的邮件执行各种复杂的操作,它支持通过读写远程服务端的标志以跟踪同步邮件的状态。POP3要求连接到邮件服务器的客户端是唯一 的,IMAP支持多个客户端同时访问。如果需要在多个客户端访问邮件,选择IMAP协议;如果需要邮件接收到本地,不想邮件保存在不受自己控制的服务商那里,选择POP3协议(前提是服务商处的设置确实会在邮件接收后删除邮件,据了解,主流服务商不是这样的,所以推荐IMAP)。

Q:在Android系统下该选择什么邮件客户端?

A:PRISM BREAK项目推荐K-9 Mail,这个应用在GitHub上有开源项目,可以看到完整的源代码。它可以在F-Droid应用市场下载,这个也是闻名的开源Android应用市场。相信开源的项目更让人放心,本人没有尝试过此应用,具体使用方法本文不研究。

参考:

HP39gs计算器改装锂电池供电

前言:

简而言之,就是切断电池仓正极连接,换成锂电池。为锂电池并联一个充电模块,充电模块供电从MINI USB接口取电。ADC电压采样电阻是R17和R18,把R17 换成 1MΩ 、R18 保持 2MΩ 不变,这样修改后,使用锂电池时电压高于3.85V,应当不会再提示Low Bat。按照这个核心方案干就完了,下面全是废话。

(回忆···)

首先说明,下文讲述的笔者是5年前干的事情的,前端时间看见欠陥電気大佬写的搞机贴,觉得此事我可以水一篇博文。那时我还是在校学生,是校电协成员。记不清是哪位朋友发现这款型号为HP 39gs的计算器在某宝以非常便宜的价格销售,仅27.58元。从来没有接触过图形计算器的我,通过搜索引擎了解到这款计算器属于图形计算器,2006年上市,当时售价千元。里面是一枚SAMSUNG S3C2410A ARM处理器,该处理器最高频率约200MHz,在该计算器中,官方设计为75MHz。据说可使用HP Basic编程语言编写程序以在此计算器上运行,另外其不支持CAS,这些我不懂。我们几位社员一合计,咱们也从来没用过图形计算器,现在有机会必须试试。好家伙,这计算器值!于是大家就入手(Keng)了。注:经简单了解,目前此计算器价格有所上涨;另外因年代久远且其设计理念不佳(S3C2410A上运行的Saturn CPU模拟器,然后模拟器上运行SysRPL),所以在当今看来,功能少,运算慢,据说其根本不适合日常工程计算使用。购(Ru)买(Keng)需谨慎!当然,笔者拿来当普通计算器算个加减乘除感觉还是可以的。算的数多了也慢。

基本规格:

*
型号: 惠普 HP 39gs 图形计算器
CPU: Samsung S3C2410A(ARM920T单核) @75MHz (实际最高约200MHz)
Memory: 256KB RAM (用户实际可用约200KB) ,1MB Flash
通信接口: USB Mini-B(Kermit 或 XModem协议) , IrDA ,4PIN 3.3V异步串口
供电: 4×AAA电池作为主电源 ,CR2032纽扣电池用于数据保持
屏幕: 131×64 像素+上方状态条 单色LCD,对比度可调
语言: sRPL , HP-Basic
其他: 内置蜂鸣器,带有硬质保护壳,不支持CAS
上市时间: 2006年 06月

注:上表信息来自维基百科

准备工作:

实践本文内容需要如下硬件准备:

  • HP 39gs 计算器
  • 合适大小的锂聚合物电池
  • 锂电池充电模块
  • 导线若干(建议线规约22AWG)
  • 螺丝刀(十字 1.0左右)
  • 薄型撬片(或撬棒)
  • 万用表(选配)

需要在技能树中点亮如下技能:

  • 电子产品拆卸技术
  • 基础电路知识
  • 基本锡焊技术

警告:电子DIY需要有一定的相关知识与技能,操作过程有静电损坏元器件风险,使用烙铁焊接有烫伤风险。请谨慎操作,避免受伤或损坏设备。笔者不会对您的改装行为所造成的任何损失负责!

改装:

我们在使用一周后发现了这一问题,耗电太快了。四枚普通AAA电池,使用一个星期就低电警告了。这对于我们这种穷苦学生怎么承受的了,所以大家想改锂电。原有供电系统为6V,考虑S3C2410A为3.3V IO系统,外围器件也多为3.3V供电,所以考虑单节锂电池供电是可能的。那年正是MPOS火爆推广的时候,1元即可买到一个MPOS还包邮,里面可以拆出拇指电池、4055单节锂电池充电IC、3.3V LDO、高精度运放IC、蓝牙模块、单片机(运气好可能是STM32)。这便给改装提供了思路,杀一只MPOS即可提供电池和锂电池充电IC,如果嫌一节电池容量太小,可以杀两只POS鸡。整个改装过程主要分为以下几步:

  1. 拆机
  2. 验证实际工作电压范围
  3. 查找并改装电压采样
  4. 制作充电电路
  5. 装配以完成改装

1.拆机:

该机器拆机简单,首先取下硬质塑料保护壳,使用薄撬片小心取下屏幕保护盖,避免划伤。使用螺丝刀拆下两颗螺丝,然后使用撬片沿机身四周撬开并取下底壳。需小心注意底壳上有电源与蜂鸣器的连接线,避免失手扯断连线。必要可使用烙铁拆焊部分连接线。请牢记各连线焊接位置,必要可拍照记录,以确保在装配时能正确复原

2.验证工作电压范围:

拆下主电源(电池仓)连接线,临时焊接测试线,连接到数控电源,使用数控电源输出模拟锂电池电压变化。经过粗略测试,电压需要保持在3.68V以上计算器才能正常工作。虽然锂电池可以放电到更低的电压,但是计算器不能在那个电压下正常工作。这表示,虽然使用单节锂电池方案不能完全使用电池的电量,但也是可行的。

3.查找并改装电压采样:

首先检查主板上的所有IC,发现没有ADC。猜测低电检测是使用CPU内置的ADC实现的,4枚AAA电池电压高达6V以上,必有分压电路进行电源电压采样后再输入ADC。一般来说,电压采样电路可能更靠近ADC,此处即应靠近S3C2410A。考虑专业设计一般会引出测试点,先对周围测试点进行电压测量,如果能测到一个会随电源电压变化而变化的电压,大概就是电压采样测试点,如果测不到那就该对周围的电阻两端进行测量,找出会随电源电压变化的点。经过测量发现,S3C2410A右上角的测试点明显符合预期。观察PCB走线,发现与R17和R18有连接。测量两颗电阻阻值分别为1.8MΩ和2MΩ,皆在兆欧级别,也符合电压采样分压电阻的规格。至此,便成功的找到了分压电路。

理论上,接下来通过数控电源提供各种电压进行测试,确定ADC输入的电压低于多少时触发低电提醒。测量后我们确认到的是2.4V,实际电池低电电压与ADC触发电压的差与ADC触发电压的比值即为R17和R18的比值。经过估算,R17 = 1.5MΩ 、R18 = 3.9MΩ应当是个不错的组合。但是实际更换后并不能按照预期提示低电,无论电量多低都没有低电提示,直到电压低至无法开机也没有低电提示。鄙人学艺不精,无法理解什么原因,但这是无法接受的。经过多次实际测试,最终我们选择将R17 换成 1MΩ 、R18 保持 2MΩ 不变,这样计算器大约会在低于3.84V提示低电,充电至高于此电压后便不会出现低电提示。

4.制作充电电路:

可充电的锂电池装到计算器里面,当然不能没有充电电路。大家可以某宝购买TP4055、TP4056等充电模块,价格很便宜。笔者当年使用了中指甲盖大小的一片单面洞洞板,将MPOS机中拆出的4055充电IC整到了上面。4055充电IC为SOT23封装,以左下角为起点1脚,逆时针旋转依次为2~5脚。1脚接充电指示LED负极,LED正极过1K电阻上4脚,与其一同连接至输入+;2脚接GND;5脚为充电电流编程脚,过一个电阻接地,阻值大小视电池容量决定;3脚为输出,连接到电池+。

5.装配:

最后我们需要将计算器装起来,前面如果都能搞定,这个并不难。把电池的正负极与充电模块的输出正负极分别连接,然后连接到计算器的主电池输入。从USB口附近或其他方便的地方引出5V电源和GND到充电模块的输入。切断电池仓正极的连接,把电池粘在底壳合适位置以保证能盖好底壳,然后把充电模块粘在电池仓缝隙处,保证能从外面看到充电指示灯。最后把底壳装回去就大功告成了。

参考:

HP 39gs --惠普官网

hpcalc.org

The HP HOME view

将 HP 39gs 升级为 HP 48gII--欠陥電気

计算器自检/HP-39GS

HP39gs 从入门到精通(完全教程)

我该用什么词典?——翻译工具的选择

前言

在研究电子技术和计算机技术的过程中,大家都不可避免的需要接触英文资料;如果英语水平不够,遇到不懂的单词、甚至成段看不懂的情况,那便需要翻译了。传统的纸质词典、电子词典等使用相对低效,在我们使用电脑看英文文档的当下,翻译这件事自然也是用电脑完成。通常,我们会通过浏览器使用谷歌、必应、百度、有道等提供的在线翻译网页查单词、整段翻译,也会在电脑上安装翻译工具程序进行翻译。而后者,作为一个应用程序,通常能提供比通过浏览器工作的在线翻译更好的使用体验。本文前部分会使用较小的篇幅记录笔者翻译工具使用史,后面的部分则介绍笔者如何配置、使用商业词典欧路词典和开源词典GoldenDict。

笔者的翻译工具使用史

说起笔者最开始使用的翻译工具,那应该是有道,那时我刚接触电脑时间不长,只是偶尔用词典软件查过几个单词,安装词典可能只是为了体验通过电脑查单词的这个过程。那时有道有鼠标取词的功能,闲暇时刻我会用鼠标胡乱指向一些中文的词语,将其翻译成英语。

后来笔者入了电子技术这个坑,阅读Datasheet的困难便随之而来,虽然我英语从未挂科,但只满足不挂科的英语水平的确不足以阅读Datasheet,更别提里面很多专业的词汇上课也不会学。可能那时比较流行使用破解版商业软件,又可能是因为PDF文档中取词的需求。看了百度上众多网友的推荐,我选择了使用破解版的金山词霸企业版,因为里面多个词库看起来蛮专业的,而且它有Adobe Reader取词插件,可以很方便的在PDF文件中拖动光标选取内容进行整段的翻译,翻译结果会自动显示。而有道不支持Adobe Reader,自然不会再使用它。

转眼来到2021年的某一天,我秃然发觉金山词霸是用了那么多年,想来这么多年过去,翻译工具是否会有更好的选择呢?一番搜索之后发现很多人都推荐欧路词典,下载安装后发觉界面不错,自带词库查词返回内容也挺多,支持整段的翻译,甚至它还有一个截屏取词的功能。取词与划词默认配置可能不适合所有人,其选项可以根据个人需求进行更改。虽然是商业软件,它的免费版本也没有广告,这点值得称赞。欧路词典可以挂载第三方提供的词库扩展,支持常见的Mdict和灵格斯格式。针对扩展词库,免费版本只能显示前两个。其实对于非英语专业来说,两个可能也够了。如果需要挂载更多扩展词库,欧路词典的价格也不贵,也就三箱桶面的样子。

通过对欧路词典几天的使用,我发现它经常出现划词翻译失灵的现象,这个问题也有可能是和其他翻译工具冲突的原因。抛开此问题不谈,我还发现它的鼠标取词功能识别率略低,之前使用金山词霸几乎没有的识别错误问题,短短几天欧路发生了好几次,但是后来的几天错误率降低了。但是软件版本并没有更新,这个表现很迷,难道是后台直接更新了部分文件还是什么其他的东西自动改变了?这些表现可能与我电脑软件环境有关,但我还是对欧路词典的稳定性抱有怀疑。

在发现欧路词典可能不稳后,开始寻找其他替代方案。想起前面看到的Mdict格式,便打算去了解了一下Mdict是什么,通过搜索引擎搜索后了解到这也是一款词典,功能不是很强,但是很多权威大辞典都是打包成这种格式。然后看到有人对Mdict、欧路词典和GoldenDict进行了简单对比,我了解到了GoldenDict是一款开源软件,它支持的词典格式较多,同时它也支持Mdict格式。然后发现了nonwill大佬优化过后的GoldenDict++OCR,这是支持OCR取词的GoldenDict版本。下载简单使用了一下后发现,功能确实挺不错,它还有一个称之为构词法规则的功能很实用。但它没有欧路词典这种商业软件那么美观的界面,配置也会比较复杂,想要使用它需要一定的折腾能力,但它是免费的。

目前我主要尝试使用欧路词典,而GoldenDict为辅。因为我不是英语专业类工作,也不是英语研究爱好者。我只是需要一个翻译工具用来翻译我无法读懂的文档。这种情况,一个简单易用美观的翻译工具是有必要的。如果欧路词典的划词稳定性没有问题,我可能会考虑购买付费版本;如果有问题,则会考虑换用GoldenDict。

词典的配置与使用

以下记录笔者使用时的配置,系统为Windows10,其他系统没有测试。仅供参考。

欧路词典:

首先是第三方词库的安装,因为免费用户只能加载两个扩展词库,所以需要做一些取舍。如可以安装一部带发音的词频词典和一部权威大词典(或行业词典),排序时把词频词典放第一,自带英汉汉英放第二,权威大辞典放第三以避免长篇幅挡住自带词典内容。如果不使用权威大辞典而是使用词条篇幅较短的行业词典,可以考虑和自带英汉汉英对调。

添加词典的操作过程。单文件的词典直接在词库管理中点击安装词库>选择文件,按照提示添加即可。多文件的词典安装时需要点击安装词库>选择文件夹。包含外观样式文件的词典,需要现在设置中心中点击打开软件配置目录,打开欧路的配置文件目录,复制词典自带的样式文件到这个目录。

欧路词典的划词翻译功能可能有问题,勾选开启划词翻译功能选项,使用光标选择一段内容后会出现翻译按钮,点击此按钮有时会出现无效的情况。但是手动划词快捷键F7按下还是能正常翻译的。这个问题可能是本人系统环境造成,也可能是欧路词典本身的Bug。针对此问题,建议记住快捷键F7,去掉开启划词翻译功能选项勾选,后期使用快捷键调用划词翻译。再记住一个截屏翻译快捷键:Ctrl+Alt+D,必要时可以直接截屏翻译。我个人始终认为:快捷键比点击图标更高效

其他设置就是比较常规的,比如我勾选了关闭窗口时最小化到状态栏。这样就可以缩到通知区域里面,不占用任务栏了。勾选启动Windows系统时自动运行,这样就可以随系统启动。如果不喜欢它的每日一句等在线内容,可以取消这个勾选,主页就会更清爽一些。其他一些快捷键也可以按实际习惯修改。

GoldenDict:

主程序安装与配置官网提供的版本已经太旧了,不支持mdx和mdd格式的词典文件,可以去SourceFORGE下载。建议使用nonwill大佬优化过后功能更强大的GoldenDict++OCR,这个有OCR功能,我也是用的这个。大佬针对Windows编译的版本都是便携版(Portable),根据自己系统下载主程序包解压到合适位置后,可以下载Dictionary文件,里面有一些共享的词典样式表和字体文件。

确保GoldenDict++OCR未打开,在其主目录下,新建portable文件夹和content文件夹。解压Dictionary文件中的dicts目录下的内容到content文件夹,解压portable目录下内容到portable文件夹。然后运行GoldenDict++OCR,点击编辑~~>首选项,打开首选项的设置页面。在此可以设置显示风格(即主题)和附加样式(查词结果显示区域的样式),.该词典上古风格的主题,在现在的审美看来糟糕透了,咱肯定不能指望免费的东西有什么漂亮的主题,但还是有必要按照自己喜好修改一下。我分别选择了灵格斯-蓝色调modern-yeah。如果需要随开机启动,可勾选随系统启动。取词和划词选项卡可以修改相应功能的快捷键,OCR取词默认快捷键是Ctrl+B+B,这个快捷键与Adobe Acrobat冲突,所以我的改成了Ctrl+Shift+C+C

词典的安装:与欧路词典需要付费不同,GoldenDict不需要付费即可加载多本词典,但是加载过多的词典可能带来使用卡顿。如果是对英语进行研究,可能需要查看大量不同词典;如果只是一般应用,建议尽量少装词典,像上文欧路配置两本词典也可以。具体按照操作:将词典文件解压到content目录,点击编辑~~>辞书在来源选项卡的文件选项卡引入前文创建的content目录的路径,然后在辞书选项卡中可以看到已经扫描到的词典。辞书排序栏中不需要的辞书,可以托拽到禁用栏中。

启用构词法规则:学习英语过程中,有时我们可能需要了解这个单词的来源是什么单词,以便更好地记忆、学习、理解单词。如果之前我们正确的将morphology文件夹放到了content目录,那么在来源选项卡下的构词法规则库页面,我们可以勾选需要的构词法(比如英语),应用设置后我们查询单词时如果在构词法库中有记录,则会在单词页面上附加显示来源词的释义。比如搜索sustainable,除了给出此单词释义是形容词可持续的,还会给出sustain的释义是动词维持。这个功能欧路词典是没有的。构词法词库还用于拼写错误时给出拼写建议。比如我听了一个词:algorithm,但我不知道如何拼写,我随手打出:aogerithm,然后GoldenDict便会给出拼写建议:algorithm,而欧路词典的建议是通过联网的网络释义实现的。

整句翻译:与其他商业公司的翻译软件相比,GoldenDict一个很大的缺点就是没有整句翻译。这个需求可以通过调用外部程序实现。因为Google翻译等对自己的翻译API做了限制,经过大佬们的努力,他们通过调用外部的一个Python程序实现,Python程序负责调用Google翻译API并把结果返回GoldenDict。笔者使用的xinebf提供的项目,托管于GitHub,项目页有详细的安装说明。

首先需要安装Python3.7以上版本,然后通过pip3 install google-translate-for-goldendict命令配置这个项目,接下来在GoldenDict中点击 编辑 - 字典 - 字典来源 - 程式,添加如下条目:

类型: Html
名称: Google Translate
命令行: python -m googletranslate zh-CN %GDWORD% -s "translate.google.cn"

图示请从GitHub项目中下载保存到合适位置,然后设置位置。保存设置后尝试使用快捷键对英文句子取词,即可看到整句翻译结果。

到此,本文结束。其他使用技巧大家可自行摸索,如果有什么见解,也可以在下面留言。

参考:

Typecho设置表格样式

前言:

正如大家看到的,本博客使用R-Blog主题。这个主题风格简洁,但有些地方可能不完善,如下所示,表格的样式也太过简洁了,不仔细看都不知道这有个表格,以至于影响到阅读。作者已经好多年没有更新了,于是需要我自己想办法解决这个问题。本人在HTML与CSS方面没有任何系统的学习经验,更不懂PHP语言。本文只是对问题解决的记录,若有错漏请各位指正。

原始表格样式

开搞:

首先,我大致看了一下Typecho文件结构,文章看样子是由./var/HyperDown.php从Markdown生成的,那表格也是由它产生。而主题以文件夹形式放在./usr/themes/下面。这个结构,想来表格生成的那边不能随意改动,只能动主题文件夹里的内容。看了下主题文件夹中的内容,是一些PHP文件和一个CSS文件。

搜索引擎简单搜了一下,了解到PHP文件在服务端运行,产生HTML文档给用户的浏览器。HTML(HyperText Markup Language)是超文本标记语言,由多种通过标签定义的元素组成,表格元素由<table>标签定义。CSS(Cascading Style Sheets)中文叫层叠样式表,用所谓的样式规则来定义HTML元素如何显示,而且它是层叠的。一条CSS规则由前部的选择器和跟在后面大括号中的一条或多条声明构成,每条声明则由一个属性名和对应的组成。

如此看来,我想要修改表格显示的样式,就要改表格相关的CSS规则。我先去网上找了几位大佬们的博客快速的浏览了一番。为自己积累一些经验,顺便F12学习一下他们表格元素的某些样式对应CSS规则中什么属性。经过一番粗略的学习,我拥有了低级的审美观念,也了解了极为有限的一部分CSS属性名的作用,接下来就是学以致用了。

R-Blog主题CSS文件只有一个,结构极为简单,打开改就完了。读书破万卷,下笔也不定有神。我先将前面学到的、我认为有用的规则写出来,然后浏览器浏览实际效果,通过F12调试功能,增删改这些规则,最终再据此修改CSS文件中的规则。经过一段时间的尝试,最终我将table相关规则替换成了以下内容:

table{width:50%;border-spacing:1px;background-color: #22aaef;border: 1.5px solid #22aaef;}
table thead tr{font-size: 17px;color: #22aaef;background-color: #DDD;}
table thead tr th{padding: 4px;}
table tbody tr{background-color: #FFF;}
table tbody tr td{padding: 4px;}
table tbody tr:nth-child(2n){background-color: #e5fcfd;}

浏览器中按Ctrl+F5刷新后,表格出现了神奇的变化。最终效果如下,我感觉还是挺满意的,大家可以评论区告诉我好不好看。

修改后的表格效果

参考:

在Windows下使用C语言开始Raspberry Pi Pico开发

什么是Raspberry Pi Pico:

最近,树莓派基金会推出了一款开发板,名为Raspberry Pi Pico。这是一块小巧快速用途广泛的最小系统开发板,它使用的是树莓派基金会自研的RP2040微控制器。树莓派官网标价为4$,国内购买价格大约30元人民币(不含邮费)。

RP2040微控制器有以下特性:两个ARM Cortex-M0+内核最高频率133MHz、 264KB的内部RAM、DMA控制器,支持挂最高达16MB的片外Flash。它有30个GPIO,4个可以作为模拟输入。外设包含2个UART、2个SPI、2个I2C、16个PWM通道以及一个USB1.1控制器。

Raspberry Pi Pico开发板支持通过C/C++或MicroPython语言进行开发,树莓派基金会官方提供了大量、详细的资料。它有一枚2MByte的SPI Flash用于存储固件,一枚RT6150B作为电源管理,一个Micro-USB接口用于供电和传输数据(包含下载固件)。板子采用40 pin 21x51 'DIP'设计,焊接排针后可以方便的使用在面包板上,同时邮票孔设计可以方便将 Pico 作为核心板贴装到其他电路板上。方便DIY爱好者实验用途的同时也兼顾了商业批量用途时的贴片安装。板子上共有26个3.3V GPIO,其中23个是纯数字IO,3个可以作为ADC使用。另外板子上有一个3Pin的ARM SWD接口用于调试,一个BOOTSEL按钮用于进入固件下载模式。它还有一个板载的LED指示灯连接在GPIO25上。

准备工作:

学习本文内容需要做如下准备:

  • Raspberry Pi Pico开发板和MicroUSB数据线,方便下载程序验证。
  • 运行Windows10的电脑,其他Win系统笔者无力测试,本文不适用Linux系统。
  • 足够的存储空间,建议至少8GB,因为C的工具链中某些工具或库会很大。

警告:以下的某些操作可能对您电脑中现有的某些工具链产生影响,如果您的电脑中有其他重要生产环境,谨慎考虑是否实践本文内容。如果您对此了解,相信您也能够解决遇到的问题。本人不会也没有技术对任何结果负责。

下载固件和体验MicroPython:

新接触到一款MCU或开发板,首先需要研究的就是如何搭建编译环境以及如何下载固件。大多我们需要先搭环境写出点灯程序,然后再进行固件下载。考虑此开发板支持MicroPython,且官方提供了已经编译好的MicroPython固件,在搭建开发环境前,我们可以先体验一番固件下载方式,顺便试一下MicroPython是如何点灯的。我们可以直接在官方如何开始页面,点击Getting Started with MicroPython。然后在网页上点击Download UF2 File下载文件。

文件下载完成后,按住BOOTSEL键,插入连接电脑的USB后松开BOOTSEL键,电脑上会显示一个名为RPI-RP2的大容量存储设备。将MicroPython UF2文件拖放到RPI-RP2卷上。Pico将重新启动,然后就可以使用串口工具连接MicroPython了。

我们可以在设备管理器里看到开发板串口的端口号,然后我们使用串口工具连接端口,波特率为9600。连接后可以按Ctrl+D软重启,此时应该可以看到相关提示信息。如下:

MPY: soft reboot
MicroPython v1.14 on 2021-02-05; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>>

官方推荐了Thonny,可以点击其官网右上角超链接下载最新版本。安装后点击工具设置,在解释器选项卡下设置解释器为Pico,并正确设置端口号。即可在下面的Shell窗口中看到提示信息。

逐行输入以下代码(>>>忽略)可以点亮板上LED:

>>> from machine import Pin
>>> led = Pin(25, Pin.OUT)
>>> led.value(1)

如果硬件正常,操作没有问题,此时板载LED已经点亮。我们便学会了如何下载固件和使用MicroPython点亮LED灯。如果想继续学习MicroPython,可参阅官方文档。

搭建C/C++编译环境:

安装工具链:

搭建编译环境的环节是必不可少的。我们首先按照文档说明安装工具链(Toolchain)。

我们需要安装的工具有:

  1. ARM GCC compiler(Windows 系统下载gcc-arm-none-eabi-XX-20XX-XX-major-win32.exe)
  2. CMake
  3. Build Tools for Visual Studio 2019(从下方的所有下载处展开VS2019工具,选择下载生成工具)
  4. Python 3(需要下载Python3,而不是Python2)
  5. Git

注意:

  1. ARM GCC compiler安装过程的最后一步,需要勾选Add path to environment variable,然后再点Finish完成安装;CMake安装过程中,InstallOptions页面要选择Add Cmake to the system PATH for all users。如果以上两个环境变量相关设置不正确,则会导致编译过程相关命令无法调用而失败。
  2. 通过VS2019生成工具下载器安装生成工具的时候,只需要在工作负载中勾选安装C++ 生成工具即可,其他不需要选择。右侧的可选功能会自动帮你选好,不要取消勾选 。也不要对存储空间占用有怀疑,这套工具确实非常大。
  3. 安装Python时需要选择Customize installation,然后在Advance Options页勾选Install for all users、Add Python to environment variables,并设置安装路径,最后点击Install开始安装,安装完成后还需要点击Disable path length limit以允许忽略MAX_PATH限制。
  4. 安装Git时,树莓派基金会官方文档做了如下要求(建议):需要换掉默认的vim编辑器,比如我换成了notepad++(因为使用vim需要极强的专业性,Git本身也建议换掉,但感觉是非必须项);后面的设置需要勾选third-party tools,勾选Checkout as is, commit as-is,还需要勾选Enable experimental support for pseudo consoles。

获取SDK和样例:

参考以下代码使用Git获取SDK和样例,具体使用的文件目录按情况自行配置:

C:\Users\pico\Downloads> git clone -b master https://github.com/raspberrypi/pico-sdk.git
C:\Users\pico\Downloads> cd pico-sdk
C:\Users\pico\Downloads\pico-sdk> git submodule update --init
C:\Users\pico\Downloads\pico-sdk> cd ..
C:\Users\pico\Downloads> git clone -b master https://github.com/raspberrypi/pico-examples.git

开始菜单搜索我习惯搜索Dev),找到Developer Command Prompt for VS 2019并启动它,然后在里面运行以下命令设置SDK路径(引号中的具体路径按实际情况填写):

C:\Users\pico\Downloads> setx PICO_SDK_PATH "..\..\pico-sdk"

关闭当前的窗口,重新打开Developer Command Prompt for VS 2019,这样环境变量应该就生效了。

导航到pico-examples目录下,通过以下命令尝试编译样例项目,以验证编译工具链是否正确配置:

C:\Users\pico\Downloads> cd pico-examples
C:\Users\pico\Downloads\pico-examples> mkdir build
C:\Users\pico\Downloads\pico-examples> cd build
C:\Users\pico\Downloads\pico-examples\build> cmake -G "NMake Makefiles" ..
C:\Users\pico\Downloads\pico-examples\build> nmake

如果没有错误,能够正常完成编译,能够在pico-examples\build下看到uf2文件,并且按照前文的方式将固件下载到Pico中后LED按照1s周期闪烁。即表示编译工具链可正常工作。

注意:以上必须使用Developer Command Prompt for VS 2019而不是系统自带的命令提示符,因为使用此工具会自带相关环境变量,而系统的命令提示符没有,使用系统的命令提示符执行操作无法成功编译。

自建工程:

确认编译工具链正常后,我们便可以开始尝试写一个自己的工程了,这在SDK的RADEME.md文件中有介绍。文档中的介绍是基于Linux系统的,但没关系,工程的目录结构是通用的,我们可以参考。以下我们参考文档建一个闪灯程序。

  1. 在合适的地方新建一个文件夹,以工程名字命名,名字建议避免使用中文和特殊符号。此处我命名为:Blinks。在文件夹内再建一个名为build的文件夹,用于存储编译后的文件。

  2. pico-sdkexternal文件夹下的pico_sdk_import.cmake复制到工程文件夹下(即Blinks下)。

  3. Blinks文件夹下建立名为blinks.c的源代码文件,在此文件中编写程序源代码。比如闪灯程序源代码如下:

     #include "pico/stdlib.h"
    
     const uint LED_PIN = 25;
    
     int main() {
         gpio_init(LED_PIN);
         gpio_set_dir(LED_PIN, GPIO_OUT);
         while (true) {
             gpio_put(LED_PIN, 1);
             sleep_ms(100);
             gpio_put(LED_PIN, 0);
             sleep_ms(100);
         }
     }
  4. 在工程文件夹下创建CMakeLists.txt文件,内容参考如下。以#开始的行是注释,用于解释,编写代码时请勿直接抄写,建议使用英文注释。

    cmake_minimum_required(VERSION 3.12)
    
    # 引入SDK (必须写在下面的project行前)
    include(pico_sdk_import.cmake)
    
    # 工程名,比如Blinks
    project(Blinks)
    
    # 初始化SDK
    pico_sdk_init()
    
    #添加项目的源文件,比如此处我们添加的blinks.c源文件
    add_executable(blinks
            blinks.c
            )
    
    # 引入pico_stdlib库
    target_link_libraries(blinks pico_stdlib)
    
    # 创建map/bin/hex 等文件.
    pico_add_extra_outputs(blinks)
  5. 打开Developer Command Prompt for VS 2019,通过以下命令编译项目。

    C:\Users\pico\Downloads> cd Blinks
    C:\Users\pico\Downloads\Blinks> cd build
    C:\Users\pico\Downloads\Blinks\build> cmake -G "NMake Makefiles" ..
    C:\Users\pico\Downloads\Blinks\build> nmake
  6. 如果一切正常,我们便可以在build文件夹下得到项目编译产生的文件,其中的uf2文件可以按前文方法下载到Pico开发板中验证,看运行结果是否与代码设计一致。

结语:

至此,我们便学会了Raspberry Pi Pico开发板点灯,后面具体可参考树莓派基金会官方提供的相关文档学习。祝大家学习顺利。

参考:

  1. 官方产品页:https://www.raspberrypi.org/products/raspberry-pi-pico/
  2. Getting-started:https://www.raspberrypi.org/documentation/pico/getting-started/
  3. Pico-SDK代码:https://github.com/raspberrypi/pico-sdk
  4. Pico-example代码:https://github.com/raspberrypi/pico-examples

Flash停止服务导致Fliqlo失效无法显示的处理方案

Flash停止服务导致Fliqlo失效无法显示的处理方案

前言:

Fliqlo是一款时钟屏保程序,很多人都在使用它。如果你对此没有印象,想一想,是否有见到很多科技视频作者电脑的屏保,是一个黑底白字的翻页时钟?十有八九是这个屏幕保护程序。2021年一月份的某一天,我秃然发现自己Windows10电脑的Fliqlo时钟屏保不能正常显示了。取而代之显示的是一个右下角带有 i 圆标的Flash标志。众所周知, i 表示information,这个图标是想要告诉我们一个关于Flash的信息,但是它并没有办法显示具体信息。联想到Flash是一项已经淘汰的技术,当即想到前几天某车站因Flash停止服务导致调度瘫痪、无法运行的新闻。网上查询,了解到Adobe官方有表示:无论是否卸载Flash,2021年一月份Flash将停止运行。我们可以得出结论,Flash停止服务导致了Windows下Fliqlo失效。题外话:一切的一切提醒我们,Flash这项技术真的到了该淘汰的时候了。Flash淘汰,2G网络淘汰,某项技术无论先前应用多么广泛,终有被更先进的技术淘汰的一天。我们自然也需要不断学习先进技术,避免自己被淘汰。
Flash_Info.jpg

解决方案

方案一:升级Fliqlo至最新版本

应用程序失效,排除自己操作问题后,首要想到的当然是尝试联系软件开发商。我在Fliqlo的官网看到了新版本的Change Log,目前的最新版本为1.4版,发布于2021年01月12日,最首要的改变就是 “不需要Flash Player” 。既然如此,我们更新到最新版应该就可以了。按照官方的指导,不能直接安装升级,我们需要先在应用和功能(程序和功能)里面卸载旧版本的Fliqlo,卸载后重启电脑。在个性化设置中的屏幕保护程序设置中检查,确认Fliqlo已经消失,否则可以手动在 C:/Windows 目录下搜索Fliqlo,将相关文件手动删除。然后运行Fliqlo 1.4 的安装程序进行安装。

Fliqlo的官网在中国大陆貌似难以直接打开,我们可能需要通过代理访问。此处提供一个下载链接,失效不补。

新版本的Fliqlo除了不需要Flash,还有一些其他改变。比如,设置移动到了屏保程序内部,可以在预览屏幕保护程序是点击鼠标,在下方修改相关设置。正因如此,新版的Fliqlo目前无法通过移动鼠标或点击鼠标退出屏保,而是只能通过按键盘退出屏保。这可能会让某些人不习惯。另一个改变是,添加了通过网络自动更新的功能,不知是否与此有关,我的在使用时经常会出现一个问题,在进入屏幕保护程序前有网络加载提示。且若关闭电脑网络,这个新版本根本不能正常显示时钟效果。新版本的不适应让我们考虑寻找其他方案。

方案二:安装使用中国企业版Flash或修改版Flash

既然Flash不能正常运行,我们想办法让Flash运行就可以了。网上了解到,因为Adobe Flash在中国是有单独公司运营的,为了中国政府网站等使用Flash的情况,有提供企业版本可以使用的Flash供大家使用。或也可使用网友们魔改的Flash来解决此问题。考虑Flash作为一项淘汰技术,本着考虑使用淘汰技术存在不稳定,不安全性,本着不断学习新技术而不是守旧的原则,本文不研究此方案具体方法,需要的可自行从网上搜索如何让自己的计算机可以继续使用Flash。

方案三:寻找其他替代应用

在GitHub上,有一个叫做FlipIt的开源项目,作者叫:phaselden。这个项目是用C#写的,要求电脑使用Windows系统,有安装 .NET Framework 4.8。最近因为Fliqlo出现的问题,导致很多人去寻找替代方案,好多人关注到了GitHub上的这个项目。有网友对标Fliqlo提了几个Issues,估计作者看到很多人关注他的项目也很有成就感,于是在积极完善项目。最近已经连续更新了好几次版本。仅仅几天,作者将没有12/24小时制、大小调整、需要手动在系统中安装字体这些问题全部解决了,它还为双显示器提供了副屏和主屏不同内容显示的模式,这点非常赞。经过短期体验,个人感觉最新版本的使用体验不错,可以平滑替代Fliqlo,所以在此推荐大家使用。