資料介紹
描述
0. 結(jié)果
遠(yuǎn)足真的很有趣,但有時遠(yuǎn)足徑的使用過于頻繁,以至于當(dāng)?shù)氐纳鷳B(tài)系統(tǒng)可能會面臨風(fēng)險。例如,偏離軌道并造成損壞。此外,非法狩獵也會使該物種處于危險之中。
目標(biāo):獎勵徒步旅行者報告活動和步道狀況,以及使用部署在各個遠(yuǎn)足地點(diǎn)的 Wio 終端收集有關(guān)步道的傳感器信息。
?
?
1.建造
1.a 硬件
Seeed Studio LoRaWAN 開發(fā)套件使這對用戶非常友好,無需真正的硬件技能。
該套件配備了所需的所有基本傳感器。在本指南中,我們將使用套件中包含的 LoRa-E5 和 AI 視覺傳感器。
將 AI 攝像頭連接到左側(cè)端口,將 LoRa 連接到右側(cè)端口。
使用以下 Arduino 代碼并上傳到 Wio 終端。
#include
#include "disk91_LoRaE5.h"
#include "Seeed_Arduino_GroveAI.h"
#include
#include "TFT_eSPI.h"
#define FF17 &FreeSans9pt7b
// keys
uint8_t deveui[] = {0x...};
uint8_t appeui[] = {0x...};
uint8_t appkey[] = {0x...};
GroveAI ai(Wire);
TFT_eSPI tft;
Disk91_LoRaE5 lorae5(false); // true, false whatever
void setup()
{
Wire.begin();
Serial.begin(115200);
randomSeed(analogRead(0));
tft.begin();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FF17);
tft.fillScreen(TFT_BLACK);
tft.setCursor(0, 20);
Serial.println("begin");
tft.println("begin");
uint32_t start = millis();
tft.println("LoRa E5 Init");
// init the library, search the LORAE5 over the different WIO port available
if (!lorae5.begin(DSKLORAE5_SEARCH_WIO))
{
Serial.println("LoRa E5 Init Failed");
tft.println("LoRa E5 Init Failed");
while (1)
;
}
tft.println("LoRa E5 Setup");
// Setup the LoRaWan Credentials
if (!lorae5.setup(
DSKLORAE5_ZONE_US915, // LoRaWan Radio Zone EU868 here
deveui,
appeui,
appkey))
{
Serial.println("LoRa E5 Setup Failed");
tft.println("LoRa E5 Setup Failed");
while (1);
}
if (ai.begin(ALGO_OBJECT_DETECTION, MODEL_EXT_INDEX_1)) // Object detection and pre-trained model 1
{
Serial.print("Version: ");
Serial.println(ai.version());
Serial.print("ID: ");
Serial.println(ai.id());
Serial.print("Algo: ");
Serial.println(ai.algo());
Serial.print("Model: ");
Serial.println(ai.model());
Serial.print("Confidence: ");
Serial.println(ai.confidence());
tft.print("AI version ");
tft.println(ai.version());
}
else
{
Serial.println("Algo begin failed. Program halting here.");
tft.println("Algo begin failed. Program halting here.");
while (1)
;
}
}
void loop()
{
uint32_t tick = millis();
tft.fillScreen(TFT_BLACK);
tft.setCursor(0, 20);
tft.println("Begin ai invoke");
// tft.println(ai.state());
if (ai.invoke()) // begin invoke
{
tft.println("wait for ai invoke");
while (1) // wait for invoking finished
{
CMD_STATE_T ret = ai.state();
if (ret == CMD_STATE_IDLE)
{
break;
}
delay(20);
}
tft.println("AI state ready");
uint8_t len = ai.get_result_len(); // receive how many people detect
if (len)
{
int time1 = millis() - tick;
Serial.print("Time consuming: ");
Serial.println(time1);
Serial.print("Number of people: ");
Serial.println(len);
tft.println("Ident success");
object_detection_t data; //get data
for (int i = 0; i < len; i++)
{
Serial.println("result:detected");
Serial.print("Detecting and calculating: ");
Serial.println(i + 1);
ai.get_result(i, (uint8_t *)&data, sizeof(object_detection_t)); //get result
Serial.print("confidence:");
Serial.print(data.confidence);
Serial.println();
uint8_t data[] = { random() };
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FF17);
tft.setCursor(0, 20);
Serial.print("Unique code: ");
tft.print("Unique code: ");
for (int i = 0; i < 4; i++)
{
Serial.print(data[i]);
tft.print(data[i]);
}
Serial.println();
tft.println();
tft.println("sending to Helium");
// Send an uplink message. The Join is automatically performed
if (lorae5.send_sync(
1, // LoRaWan Port
data, // data array
sizeof(data), // size of the data
false, // we are not expecting a ack
7, // Spread Factor
14 // Tx Power in dBm
))
{
Serial.println("Uplink done");
if (lorae5.isDownlinkReceived())
{
Serial.println("A downlink has been received");
if (lorae5.isDownlinkPending())
{
Serial.println("More downlink are pending");
}
}
} else {
Serial.println("uplink failed");
}
delay(30000);
}
}
else
{
// Serial.println("No identification");
delay(1000);
}
}
else
{
delay(1000);
Serial.println("Invoke Failed.");
tft.println("Invoke Failed.");
}
}
LoRa 代碼基于https://github.com/disk91/Disk91_LoRaE5并且有許多示例可以在完全提交上述代碼之前測試設(shè)備。
該代碼將檢測到一個人,然后顯示一個隨機(jī)數(shù),然后可以在前端兌換該隨機(jī)數(shù)以領(lǐng)取 NFT。終端應(yīng)顯示以下內(nèi)容:
1.b 軟件
1.ba 氦氣
這部分將是工作的主體。應(yīng)設(shè)置 Helium 控制臺,使集成流程如下所示
uniq_code_decoder 定義為:
function Decoder(bytes, port, uplink_info) {
var decoded = {};
if (port == 1) {
decoded.unique_code = bytes;
}
return decoded;
}
對于 webhook 階段,我選擇使用 RequestBin:
對于“節(jié)點(diǎn)”階段,代碼是:
import { FormData, Blob } from "formdata-node";
import { FormDataEncoder } from "form-data-encoder";
import {Readable} from "stream"
import fetch from "node-fetch"
// To use previous step data, pass the `steps` object to the run() function
export default defineComponent({
async run({ steps, $ }) {
// Return data to use it in future steps
const url = "https://api.web3.storage/upload";
let sensorData = {
"device_pinValue": steps.trigger.event.body.decoded.payload.unique_code
};
console.log(sensorData);
let form = new FormData();
let blob = new Blob([new TextEncoder().encode(JSON.stringify(sensorData))], { type: "application/json;charset=utf-8" });
console.log(blob);
form.append('file', blob, steps.trigger.event.body.uuid + ".json");
console.log(form);
const encoder = new FormDataEncoder(form)
const key = "web3APIKEY"
const options = {
method: "post",
headers: Object.assign({}, encoder.headers, {"Authorization": "Bearer "+ key}),
body: Readable.from(encoder)
}
const resp = await fetch(url, options);
const text = await resp.text()
console.log(text);
return resp;
},
})
“web3APIKEY”需要替換為來自web3.storage (免費(fèi))的 API 密鑰。
這部分也可以由后端代碼提供服務(wù)。
1.bb web3傳送門
前端代碼位于: https: //github.com/exp0nge/trail-conservation/tree/master/trail-ui它是使用 ReactJS 構(gòu)建的,因此應(yīng)該非常易讀。有幾個集成:
- NFTPort:使用來自終端的唯一代碼鑄造 Trail Completionist NFT
- Pexels:NFT 圖像
- web3.storage:NFT鏡像備份的去中心化存儲
- 開源硬件之保護(hù)花園免受貓的侵害
- 通過隱私保護(hù)監(jiān)控遠(yuǎn)程居家養(yǎng)老開源分享
- 簡單的揚(yáng)聲器保護(hù)開源項目
- AWPS(高級工人保護(hù)系統(tǒng))開源分享
- 鋰電池過充電保護(hù)開源項目
- 開源3串鋰電池充放電保護(hù)板
- 開源網(wǎng)絡(luò)協(xié)議分析器WireShark軟件下載 15次下載
- 繼電保護(hù)用開關(guān)電源的故障分析及措施綜述 14次下載
- 基于ExtraTrees的差分隱私保護(hù)算法DiffPETs 10次下載
- ThinkPHP 6.0完全開發(fā)手冊資源下載 13次下載
- 開源課程行動倡議及科學(xué)導(dǎo)論綜述 6次下載
- 電力系統(tǒng)繼電保護(hù)第七章-微機(jī)保護(hù)概述(課件)下載.ppt 0次下載
- 電力系統(tǒng)繼電保護(hù)第四章-輸電線路縱聯(lián)保護(hù)(課件)下載.PPT 0次下載
- 電力系統(tǒng)繼電保護(hù)第三章-電網(wǎng)的距離保護(hù)(課件).ppt 0次下載
- 電力系統(tǒng)繼電保護(hù)第二章-電網(wǎng)的電流保護(hù)(課件).ppt 0次下載
- AWTK 開源串口屏開發(fā)(7) - 屏幕保護(hù) 252次閱讀
- 變壓器的主保護(hù)和后備保護(hù) 1.9w次閱讀
- 利用開源軟件的最佳實(shí)踐 464次閱讀
- 前沿開源技術(shù)領(lǐng)域的開源大數(shù)據(jù)一一解讀 1006次閱讀
- 保護(hù)接地與保護(hù)接零的區(qū)別與聯(lián)系 1359次閱讀
- 保護(hù)接地與保護(hù)接零的區(qū)別 4.2w次閱讀
- 2020年開源的六大發(fā)展趨勢 4257次閱讀
- 距離保護(hù)I、Ⅱ、Ⅲ段的保護(hù)范圍 2.4w次閱讀
- 開源過程中的5件注意事項 3548次閱讀
- 開源與云的一些爭論 3200次閱讀
- 電路保護(hù)的類型_電路保護(hù)元件有哪些 5955次閱讀
- 鋰電池并聯(lián)充電時保護(hù)板均衡原理 3w次閱讀
- NASA的開源軟件是什么?NASA的開源軟件的詳細(xì)分析 7188次閱讀
- 什么是短路保護(hù)?什么是過載保護(hù)?短路保護(hù)與過載保護(hù)的區(qū)別是什么? 3.7w次閱讀
- 11個機(jī)器學(xué)習(xí)開源項目 2767次閱讀
下載排行
本周
- 1開關(guān)電源設(shè)計原理手冊
- 1.83 MB | 14次下載 | 免費(fèi)
- 2智能小車proteus仿真+C源程序
- 0.02 MB | 4次下載 | 免費(fèi)
- 3PL4807單節(jié)鋰離子電池充電器中文手冊
- 1.36 MB | 3次下載 | 免費(fèi)
- 4BQ769142技術(shù)參考手冊
- 2.99MB | 2次下載 | 免費(fèi)
- 5BQ77207EVM用戶指南
- 865.23KB | 2次下載 | 免費(fèi)
- 6TMR技術(shù)在電流傳感器中的應(yīng)用
- 616.47 KB | 1次下載 | 免費(fèi)
- 7CBM8605_8606_8608-運(yùn)算放大器【中文排版】-202406271735
- 2.70 MB | 1次下載 | 免費(fèi)
- 801-07-06-CBM8655_CBM8656精密運(yùn)算放大器
- 4.49 MB | 1次下載 | 免費(fèi)
本月
- 1XL4015+LM358恒壓恒流電路圖
- 0.38 MB | 155次下載 | 1 積分
- 2PCB布線和布局電路設(shè)計規(guī)則
- 0.40 MB | 52次下載 | 免費(fèi)
- 3GB/T4706.1-2024 家用和類似用途電器的安全第1部分:通用要求
- 7.43 MB | 14次下載 | 1 積分
- 4智能門鎖原理圖
- 0.39 MB | 14次下載 | 免費(fèi)
- 5開關(guān)電源設(shè)計原理手冊
- 1.83 MB | 14次下載 | 免費(fèi)
- 6elmo直線電機(jī)驅(qū)動調(diào)試細(xì)則
- 4.76 MB | 9次下載 | 6 積分
- 7WIFI智能音箱原理圖完整版
- 0.09 MB | 7次下載 | 10 積分
- 8PC1013三合一快充數(shù)據(jù)線充電芯片介紹
- 1.03 MB | 7次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935115次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183333次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73806次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65985次下載 | 10 積分
評論
查看更多