前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Owl项目

Owl项目

作者头像
云深无际
发布2020-08-12 15:18:37
1.4K0
发布2020-08-12 15:18:37
举报
文章被收录于专栏:云深之无迹云深之无迹

现在,借助Owl项目,Wi-Fi网络可以部署在世界任何地方

不久的将来是物联网。也就是说,不仅在地理上最大程度地覆盖了全球网络,而且还渗透到了生活的各个领域。包括我们的房屋在内,几乎所有家用电器中都有。这就需要进一步开发带有设备的收发器网络。

搜索网络解决方案

认为只有IT行业的公司才参与Internet的全面渗透和扩展问题是徒劳的。根据估计,这项任务原则上具有如此规模,范围和复杂性,即由多个不同的跨国公司创建的企业集团。

例如,在具有煽动性的Ilon Mask和他的公司SpaceX(航天工业)的主持下,雄心勃勃的Starlink项目开始实施。传统上,对他而言,计划是“拿破仑式”的:他们威胁要在不同高度的轨道上发射近12千颗卫星。到2024年,他们承诺以1 GB /从到 世界上任何地方。

最近的竞争对手 - OneWeb专案,在维珍银河(Virgin Galactic),高通(Qualcomm),空中客车(Airbus)甚至可口可乐(Coca-Cola)的全面领导下, 共同投资者。它们的范围显然更适中,因此似乎更现实。该计划旨在发射近2千颗低轨道卫星。空间网络明显不那么“密集”,但是为了高质量和高可用性,将部署功能更强大的地面收发器基础结构。他们承诺在2027年之前为地球上的每个居民提供通道。

在这种“泰坦之战”的背景下,人们不禁要关注更多的本地项目。同时,即使仅仅是因为他们的明显需要,他们也同样有前途。

重要的信息! 俄罗斯还参加了OneWeb项目。特别是,在2月28的Soyuz-ST-B运载火箭2019的帮助下,测试车辆成功发射,并从库拉国际机场发射到6轨道。

猫头鹰计划

IBM曾是IT行业的全球巨头,曾经是微电子领域的潮流引领者,但仍力争走在前列。如果不是以前那样,那么至少在部门上寻求保持在高科技市场的主要地位。特别是在2018中,他们举行了公开的“代码征集”竞赛,为此目的开放了自己设计的软件代码。他的想法是提出一个这样的人工智能(AI)系统项目,该项目可以帮助处于紧急情况下的人们(例如在自然灾害期间)。

值得注意的是,胜利是由一个前黑客团队开发的,名为Project Owl。其本质 - 在电话服务不可用时联系并拨打紧急救援服务的能力。

这可以通过网络的现有元素来实现,并通过特殊集线器(信号放大器)进行部分补充。事实是,在许多地方,现有的低频Wi-Fi都具有所谓的“灰色地带”和Internet连接。因此,在使用放大器的情况下,智能手机可以配备附加功能,以在失去正常的蜂窝通信的情况下连接到紧急服务。

集线器本身有一个半开玩笑的名字DuckLinks。通过与橡皮鸭相似的原理用于浴室。因为建议的网络应该位于任何地方,也就是在水上。因此,该设备具有不规则多面体的形状,而防震和 防水。 但是他的颜色是一样的 黄色。 积极解决低成本问题对于其广泛使用也很重要。

如有必要,通过从空中排放相对少量的DuckLink,可以将覆盖网络扩展到100 sq。公里 在遭受毁灭性飓风玛丽袭击后,第一批实际测试在波多黎各的2017进行。然后将这些设备在不同的条件和环境下倾倒在船和汽车上。

IT技术领域的竞赛通常是雄心勃勃的,规模宏大。这使得它的一些参与者没有注意到她脚下的过程。幸运的是,有些人提供了易于实施的原创思想。最重要的是 - 非常有前途的使用。

我真的无语了,本来对这个东西感兴趣。找遍全网都找不到关于这个的详细资料。都在搞新闻。真是无语~

代码语言:javascript
复制
https://github.com/Code-and-Response/ClusterDuck-Protocol
http://clusterduckprotocol.org/

官网首页

基于鸭子的作品

它是什么?

2017年,五级飓风玛丽亚袭击了波多黎各,对岛上的基础设施造成了严重破坏。飓风过后很长一段时间,通讯和电源被禁用,造成了持久影响。如果平民能够访问基本网络,并在其中向紧急服务和地方政府发送短信,则许多这些问题本来可以避免。

ClusterDuck协议是由Project OWL创建的,它是一种易于使用的移动网状网络,人们无需特定的硬件或预先下载的软件(如移动应用程序)即可访问。自创建以来,ClusterDuck协议的愿景已不仅仅是在飓风过后为有需要的人提供服务,还针对地震,山火,蜂窝拥塞(大型事件),传感器网络等更多用例。OWL项目将此项目开源,以便ClusterDuck协议可以尽快到达需要它的社区,并继续探索新的方向。

它是如何工作的?

网络由称为“ Ducks”的多个节点组成。ClusterDuck网络中有3个核心角色:DuckLink,MamaDuck和PapaDuck。DuckLinks充当仅传输数据的边缘节点。这些功能用作远程传感器或作为Captive Portal的其他访问点。MamaDucks继承了DuckLinks的相同功能,但也接收消息。MamaDucks重复来自DuckLinks和其他MamaDucks的消息,直到消息到达PapaDuck。PapaDucks是收集所有数据并可以存储或推送到云的网络端点。(即将推出免费的层云平台)

专属门户

强制门户是ClusterDuck协议网络中的重要功能。Captive Portal允许智能手机和笔记本电脑等设备访问网络,而无需下载其他软件,因为它利用了智能手机(如Android和iPhone设备和笔记本电脑)固有的系统的优势。

这在地震或飓风等造成传统通信基础设施瘫痪的事件发生后非常有用。用户可以连接到DuckLink或MamaDuck的WiFi接入点,后者将依次转发其消息。

全新 DetectorDuck

设置网络时,可能很难弄清Duck设备在现场的放置位置。使用DetectorDuck可以轻松确保在临时部署时Ducks能够保持连接性。它每隔3秒对ping一次进行工作,并获取最近的Duck设备的Pong的RSSI值。根据RSSI值,连接的RGB LED将在蓝色(范围内没有设备),绿色(良好连接),紫色(良好连接)和红色(正常连接)之间改变颜色。

安装

要使用ClusterDuck协议,请遵循“ 如何构建Duck”安装指南。

  • 与PlatformIO一起使用
  • 与Arduino IDE一起使用

快速开始

在Arduino IDE中打开新草图或使用PlatformIO创建一个新项目,并包含ClusterDuck库

代码语言:javascript
复制
#include "ClusterDuck.h"

创建ClusterDuck对象

代码语言:javascript
复制
ClusterDuck duck;

初始化ClusterDuck类对象

在setup()中
代码语言:javascript
复制
duck.begin(baudRate);

初始化串行打印和消息传递的波特率。您可以调整到所需的波特率。

  • int baudRate-默认为115200

设置设备ID和强制门户格式长度。

代码语言:javascript
复制
duck.setDeviceId(String deviceId, const int formLength);
  • 字符串deviceId-输入用于在网络上标识您已注册设备的设备ID-请勿保留null或空字符串
  • const int formLength-(可选)定义强制门户网站表单字段的数量-默认为10以匹配我们的默认强制门户模板

设置DuckLink

代码语言:javascript
复制
duck.setupDuckLink();

duck.setupMamaDuck也可以在此处用于设置MamaDuck,但是不能在同一草图中同时使用两者。

循环中

添加相应的Duck运行代码。必须与中使用的设备类型相同setup()。(例如,如果duck.setupMamaDuck()在使用setup()使用duck.runMamaDuck()

代码语言:javascript
复制
duck.runDuckLink();

您的草图应如下所示:

代码语言:javascript
复制
#include "ClusterDuck.h"
ClusterDuck duck;

void setup() {
// put your setup code here, to run once:
    duck.begin();
    duck.setDeviceId("Z", 10);
    duck.setupDuckLink();
}

void loop() {
// put your main code here, to run repeatedly:
    duck.runDuckLink();
}

现在编译并上传到您的设备。如果使用Heltec LoRa ESP32开发板,则应在LED屏幕上看到Duck Online消息。现在,您可以打开手机或笔记本电脑的Wi-Fi偏好设置,然后连接到SOS DuckLink Network

如果看不到强制门户网站屏幕,则可以通过访问neverssl.com来强制执行此操作,这将确保强制门户网站拦截HTTP请求。

API

setDeviceId(String deviceId)

  • 设置将用于防止DDoS(Duck拒绝服务或Duck DoS)的设备ID。不要将deviceId 保留为或为空字符串。在中使用setup()

void begin(int baudRate)

  • 初始化串行的波特率。在中使用setup()

void setupDisplay(String deviceType)

  • 初始化Heltec LoRa ESP32上的LED屏幕,并将其配置为显示状态,设备ID和设备类型。在中使用setup()

void setupLoRa(long BAND, int SS, int RST, int DI0, int DI1, int TxPower)

  • 初始化LoRa广播。默认设置为Heltec LoRa ESP32引脚(SS = 18,RST = 14,DI0 = 26,DI1 = 25)。TxPower对应于无线电的发射功率(最大值:20)。在中使用setup()

void setFlag(void)

  • 在LORA包所接收组receivedFlag至,如果enableInterrupt是假的

void setupWebServer(bool createCaptivePortal = false)

  • 初始化网络服务器和路由。将createCaptivePortal设置为true将使强制门户在连接时自动弹出。如果设置为false,则仍然可以通过打开浏览器并转到192.168.1.1来访问强制门户。
  • /:HTTP_GET:强制门户。
  • / formSubmit:HTTP_POST:从html中具有名称标签的所有输入中收集数据,并将其转换为单个字符串,每个元素用*分隔。然后运行。sendPayloadStandard(String msg)
  • / id:返回_deviceId。
  • / restart:HTTP_GET:重新启动Duck。
  • / mac:HTTP_GET:返回设备的mac地址
  • / wifi:HTTP_GET:更改wifi凭证的门户
  • / changeSSID:HTTP_POST:采用名称标签等于ssid并通过的输入值。使用这些值运行setupInternet(String SSID, String PASSWORD)

void setupWifiAp(const char * AP)

  • 使用SSID = AP初始化WiFi接入点。

void setupDns()

  • 初始化DNS服务器。

void setupInternet(String SSID, String PASSWORD)

  • 使用随附的credentail将设备连接到WiFi。

int handlePacket()

  • 接收收到的LoRa数据包并将数据传输。

void processPortalRequest()

  • 处理到强制门户的传入和活动连接。运行强制门户网站时必需。在中使用loop()

void setupDuckLink()

  • 用于设置DuckLink设备的模板。用于setup()

void runDuckLink()

  • 用于运行DuckLink核心功能的模板。在中使用loop()

void setupDetect()

  • 用于设置DetectorDuck设备的模板。在中使用setup()

void runDetect()

  • 用于运行DetectorDuck的核心功能的模板。在中使用loop()

void setupMamaDuck()

  • 设置MamaDuck设备的模板。在中使用setup()

void runMamaDuck()

  • 用于运行MamaDuck的核心功能的模板。在中使用loop()

void sendPayloadMessage(String msg)

  • 将msg打包到LoRa数据包中,并通过LoRa发送。将自动将当前设备的ID设置为发件人ID,并为邮件创建一个UUID。

void sendPayloadStandard(String msg, String senderId = "", String messageId = "", String path = "")

  • 类似于并可能取代sendPayloadMessage()。senderId是消息发起者的ID。messageId是消息的UUID。ms是要发送的消息有效负载。path是消息的记录路径,用作检查以防止设备发送多个相同的消息。

void couple(byte byteCode, String outgoing)

  • 将数据写入LoRa数据包。传出是要发送的有效载荷数据。byteCode与传出配对,因此可用于识别单个级别的数据。setDeviceId()字节码参考。另外,它将传出长度写入LoRa数据包。

bool idInPath(String path)

  • 检查路径是否包含deviceId。返回布尔值。

String * getPacketData(int pSize)

  • 调用以遍历接收到的LoRa数据包并以String数组形式返回数据。
  • 注意:如果使用标准字节码,它将senderId,messageId,有效负载和路径存储在Packet对象中。可以使用getLastPacket()

void restartDuck()

  • 如果使用ESP32架构,调用此函数将重启设备。

void reboot(void *)

  • restartDuck()使用计时器时用于通话

void imAlive(void *)

  • 用于在计时器上通过LoRa发送“ 1”,以表示设备仍在运行且功能正常。

String duckMac(boolean format)

  • 返回设备的MAC地址。使用true作为参数将返回使用格式化的MAC地址“:”

String uuidCreator()

  • 以8个随机字符和数字的字符串形式返回

String getDeviceId()

  • 返回设备ID

Packet getLastPacket()

  • 返回一个Packet对象,其中包含senderId,messageId,有效负载和最后收到的数据包的路径。
  • 注意:值在运行后会更新 getPacketData()

volatile bool getFlag()

  • 返回看重receivedFlag。

volatile bool getInterrupt()

  • 返回enableInterrupt的值。

int getRSSI()

  • 返回最后收到的数据包的RSSI。

Sting getSSID()

  • 返回wifi凭据的设置SSID。

Sting getPassword()

  • 返回wifi凭据的设置密码。

void flipFlag()

  • 翻转布尔值receivedFlag。

void flipInterrupt()

  • 翻转bool enableInterrupt的值。

void startReceive()

  • 启动LoRa接收模式。

void startTransmit()

  • 传输存储在传输中的包。重置packetIndex和传输
  • TODO:如果发送数据包时出错,则该数据包将被删除。添加功能以重试,但不创建无限循环。也许使用中断。

void ping()

  • 使用字节码ping_B发送ping 。

void setupLED()

  • RGB LED的设置通道。

void setColor(int red, int green, int blue)

  • 设置RGB LED的颜色,0-256。

又是一个arduino的开源项目~我会跟着一起折腾~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 现在,借助Owl项目,Wi-Fi网络可以部署在世界任何地方
    • 搜索网络解决方案
      • 猫头鹰计划
        • 它是什么?
          • 它是如何工作的?
            • 专属门户
              • 全新 DetectorDuck
              • 安装
                • 快速开始
                  • API
                  相关产品与服务
                  短信
                  腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档