MAKER:Dave Akerman/译:趣无尽 Cherry(转载请注明出处)

虽说 micro:bit 的基本功能相对树莓派等开发板来说并不算丰富,但它的处理器有足够多的闪存和 RAM 来实现一个具有基本功能的追踪器,同时 micro:bit 还带有加速计和指南针芯片,这让实现追踪更加方便。下面以气球追踪器为例介绍制造的方法和步骤。

micro:bit 自带 SPI、I2C 和串口,可以通过转接板引出,不需要直接焊接到焊盘上。另外你可以购买一个专用的电池盒。

材料清单

micro:bit×1

转接板×1

UBlox 模块×1

LoRa 收发器×1

电池盒×1

硬件的介绍

UBlox 模块

气球追踪器需要一个合适的 GPS,以便在高空中发送位置,另外还需要一个 ISM 频段无线电发射机。最后,我选择了 UBlox 模块。

这个模块包括一个 I2C 端口和常用串口。由于 micro:bit 的串口通常是由 USB 连接到电脑。如果我们使用串口的 GPS 软件,那么开发会变得困难,而 I2C 会让开发更容易一些。

LoRa 收发器

接下来是无线电部分。现在,最受欢迎的是 ntx2b 无线电发射器,但它需要一个串口,所以我没有选择它。我选择了 LoRa 收发器,因为它带有一个 SPI 接口,串口还可以用于调试。

组装硬件

现在可以将所有的硬件连接在一起。因为原型板上没有太多的空间,为了让 GPS 远离其他设备(以便减少干扰),所以我把 GPS 和无线电放在电线尾部。

软件部分

GPS 软件

有许多的编程方式可以应用于 micro:bit 上,我选择了 MicroPython。

1、我开始使用一些简单的代码,从 GPS 上获取 NMEA 数据流,这只需了几分钟。

2、将树莓派的 Python GPS NMEA 分析器移植过来(只需改变代码使用 micro:bit 的 I2C 库而不是树莓派的串口)。

查看我的另一个项目的测试程序(它是为汽车编写的,因此没有把 GPS 放到飞行模式中)。

https://microbit-micropython.readthedocs.io/en/latest/i2c.html

LoRa 无线软件

测试设备连接好后,只要在 micro:bit 的 REPL 输入少量命令就可以完成了移植。

在 SPI 库中,要删除所有 LoRa 寄存器定义,因为它占用过多的程序。查看结果测程序:

https://gist.github.com/daveake/86f7ba32fa8018acd5e5359674a737e5

为了收到 LoRa 的传输数据,你需要安装另一个 Lora 模块作为接收器,再使用适合的软件。我用自己编写的 C Lora 网关代码进行接收。 C Lora 网关代码:

https://github.com/daveake/lora-gateway

气球追踪程序

项目组装非常的简单,但是软件还需调整才行。

一旦 GPS 和无线模块开始工作,那么你只需要少量的额外的代码将 GPS 数据作为一个字符串,添加一个前缀(“$$”和有效的 ID)和后缀(“*”以及 CRC),然后通过无线发送结果。然而,当我将 GPS 和 LoRa 代码放在一起,就无法编译。

在 micro:bit 上的代码不能太大,还好它不是太大,然后我删除了一些不必要的代码(主要是在代码中关闭未使用 GPS 的 NMEA 句子),最后编译器可以正常工作。

但是结果并不理想。一旦编译完成就会将产生的字节码加载到 micro:bit 的 RAM,它会将程序中使用的任何数据(变量、堆栈、临时工作区)共用。Python 的本质是内存一直被分配,并在必要时释放,当程序试图分配比可用内存更多的空间时,我的程序将运行很短一段时间后会因为内存不足而崩溃。这是它在崩溃前的工作结果。

因此我不得不减少内存占用。我习惯在微控制器上用 C 语言,但 MicroPython 需要不同的技术。例如,在微存储器上 C 通常位于闪存中,对 RAM 中数据的限制要少,所以有时你可以重写代码以使用较少的 RAM,而不必担心新代码使用更多的代码空间。而不像在 MicroPython 中,一切都会在RAM 共享。我也做了一些尝试,但情况更糟(通过在主循环中调用 gc.free_ram())。

然后,我通过移除不需要的代码来增加剩余 RAM。这样做之后,程序变得稳定。每个循环都会分配内存,自由内存会不断增加和减少,然后最终释放。

容易改进是用 LED 显示 GPS 卫星的数量,只需导入所需的模块,而不是整个 micro:bit 库。代码的最相关的部分原来是建立一个 NMEA。在 C 中,只需为需要解析的最长语句分配足够的内存,然后使用指针或数组将传入的字节放入内存中,检查缓冲区溢出的过程。在 Python 中的字符串是不可变的,你不能用同样的方法。可以用“string = string + new_character”。

当然,Python解释器将为结果字符串分配新内存,将旧字符串标记为“不再使用”,因此稍后可以释放它,最终会有很多闲置的内存等待释放。现在,我的 NMEA 代码中每当收到新的字节就会释放内存。我曾改变代码使用 bytearrays,这是最接近 C 语言的方法,但内存还略有下降(我假设原来占用更多的空间),所以我回到原代码。最终,我重写 NMEA 代码,使用二进制 UBX 协议代替。

代码已经连续运行了 12 个多小时,而空闲内存图是实心的(在主循环中每一次都在同一个点上测量)。我确实还需要添加飞行模式代码,这个应该问题不大。如果一切顺利的话,选择一个合适的天气就可以开始飞行了。

最后,这是我最近通过 Python Lora 网关程序接收的测试结果。

python画气球_micro:bit + LoRa 实现气球追踪相关推荐

  1. python turtle画气球-micro:bit + LoRa 实现气球追踪

    MAKER:Dave Akerman/译:趣无尽 Cherry(转载请注明出处) 虽说 micro:bit 的基本功能相对树莓派等开发板来说并不算丰富,但它的处理器有足够多的闪存和 RAM 来实现一个 ...

  2. 用python画气球循环画图_Python 利用循环画散点图

    原博文 2018-12-10 11:53 − 1 import pandas as pd 2 data = pd.read_csv('D:/suning/iris.csv') 3 data = dat ...

  3. python画气球_戳气球(python)

    问题描述* 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.如果你戳破气球 i ,就可以获得 nums[left] * nu ...

  4. python画一朵“玫瑰”

    欢迎加入我们卧虎藏龙的python讨论qq群:729683466 导语 之前在群里 有很多朋友私聊我 说想用python给女神表白 却不知道用什么比较好 今天,我就给大家准备一个表白神器 用pytho ...

  5. 怎么用python画个电脑_python语言还是java如何用python画爱心

    用python绘制爱心的基本步骤如下: 002pc.com对<python语言还是java如何用python画爱心>总结来说,为我们学习Python很实用. 首先先下载安装好python程 ...

  6. 开学季,教你用Python画大学教室座位神分区图!网友直呼“中枪”

    作者 | 丁彦军 转载自恋习Python(ID:sldata2017) 我们上过大学的朋友们都知道,大学没有固定教室也没有固定的座位,所以大家可以随便找个自己喜欢的位置坐下. 别看这些不起眼的座位,感 ...

  7. 圣诞节!教你用Python画棵圣诞树

    作者 | 糖甜甜甜,985高校经管研二,擅长用 Python.R.tableau 等工具结合统计学和机器学习模型做数据分析. 来源 | 经管人学数据分析(ID:DAT-2017) 如何用Python画 ...

  8. 用python画时序图源代码_使用python实现画AR模型时序图

    背景: 用python画AR模型的时序图. 结果: 代码: import numpy as np import matplotlib.pyplot as plt """ ...

  9. 用python画微信捂脸_用 Python 画一个捂脸表情

    微信中的捂脸表情相信大家都不陌生,我见过以及自己使用这个表情的频率都是比较高的,可以说这个表情算是大部分人的主打表情之一了,本文我使用 Python 来画一下这个表情,我们使用到的库还是 turtle ...

最新文章

  1. LabVIEW仪表盘识别(实战篇—6)
  2. C++学习笔记-----用位运算实现加减乘除
  3. 一个用了统计CPU 内存 硬盘 使用率的shell脚本
  4. java元婴期(22)----java进阶(mybatis(1)---mybatis框架概述入门程序)
  5. python安装unittest_python 自动化测试 (一):安装 requests,unittest,HTMLTestRunner
  6. 【AcWing 249. 蒲公英】
  7. tf.train.Saver
  8. 小程序开发时能否使用我们自定义的字体图标
  9. struts2的通配符和动态方法调用
  10. java去除字符串中的特定字符
  11. Python爬虫自学系列(四)
  12. RxJava结合Retrofit使用 自定义封装类结合泛型 请求网络数据+Fresco+RecyclerView+MVP分层
  13. 冶金矿山数字化价值链分析
  14. 面试时要怎么做自我介绍呢?
  15. 后端Java人必备:30个优化SQL的良心建议
  16. 苹果16g不够用怎么办_孩子不够自信怎么办?父母学会用这4个方法,孩子长大更优秀自信...
  17. LOOK LOOK 微端服务器
  18. 【C语言】世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
  19. 企业抖音账号流量提升3步法,新号也能过百万播放量
  20. 魔兽世界怀旧版本最新服务器,魔兽世界怀旧服1.13.3版本更新了哪些 魔兽世界怀旧服1.13.3版本更新内容汇总...

热门文章

  1. Oracle Trunc 函数 用法详解
  2. scp 从linux上传下载文件
  3. 【绝对干货】云虚拟主机网站无法访问的问题都在这里
  4. 很强的flash游戏
  5. c语言调汇编程序比较字符串,用汇编语言实现两个字符串的输入并比较,输出不同字符的个数,要用MACRO比较...
  6. 学习笔记(2)点云网格化
  7. OpenShift 容器平台社区版 OKD 4.10.0部署--基于VSphere
  8. JAVA零基础入门第一阶段(7)
  9. 微信浏览器video标签没有封面_微信h5页面video标签用法总结
  10. 阿里巴巴中国站按图搜索1688商品(拍立淘) API