資料介紹
描述
背景:
我正在尋找一個跳傘數(shù)字高度計,發(fā)現(xiàn)它們在這里的價格約為 300 到 500 美元。不僅如此,它們中的大多數(shù)都具有三個按鈕,但它們在每個設(shè)備上執(zhí)行的功能并不相同。因此,我們必須閱讀手冊并記住每個功能的按鈕按下順序。
在本教程中,我們將大量提及Audible Abby ,因此,熟悉該項目會有所幫助。我收到的關(guān)于 Audible Abby 的反饋之一是“那么,您如何更改警報高度?”。老實說,如果你不了解 Arduino,那你就不走運了!
上述問題的解決方案是一個免費的 Android 藍(lán)牙低功耗 (BLE) 應(yīng)用程序,它允許您使用智能手機(jī)調(diào)整飛機(jī)的高度。啟動后,該應(yīng)用程序會連接到由安森美半導(dǎo)體的 RSL10-SENSE-DB-GEVK 提供支持的自制高度計 (ALTER)。
本教程的目的是教你如何釣魚,而不是僅僅看著我吃生魚片。您將學(xué)習(xí)如何進(jìn)行恢復(fù)出廠設(shè)置、創(chuàng)建 BLE Android 應(yīng)用程序、將 OLED 添加到您的項目中、從 RSL10-SENSE-DB-GEVK 中獲取更多 GPIO,以及應(yīng)對生活中的逆境。
一路走來,我會盡我所能來招待你,因為這將是一個很長的教程;所以,你可能想坐下。如果您已經(jīng)坐下,則無需采取進(jìn)一步行動。
軟件:沒有 ALTER 就無法拼寫高度計
這一步可能看起來很嚇人,但是一旦你知道了幾件事,它就真的很簡單了。Martyn Currey的教程展示了如何輕松創(chuàng)建免費的 Android 應(yīng)用程序以將您的手機(jī)連接到 BLE 設(shè)備。這里的問題是 UUID 看起來像這樣:
0000FFE0-0000-1000-8000-00805F9B34FB
如果您打開 BLE_ICS.h(在 Pack 文件夾中),您會看到如下內(nèi)容:
#define ICS_SERVICE_UUID { 0x24, 0xdc, 0x0e, 0x6e, 0x01, 0x40, \ 0xca, 0x9e, 0xe5, 0xa9, 0xa3, 0x00, \ 0xb5, 0xf3, 0x93, 0xe0 }
以下是如何將您的格式轉(zhuǎn)換為ai2.appinventor.mit.edu可用的格式:
1 - 保留空格并刪除花括號、逗號和 0x 24 dc 0e 6e 01 40 ca 9e e5 a9 a3 00 b5 f3 93 e0
2 - 反轉(zhuǎn)所有對的順序(第一對變?yōu)樽詈?,最后一對變?yōu)榈谝唬?/font> e0 93 f3 b5 00 a3 a9 e5 9e ca 40 01 6e 0e dc 24
3 - 刪除空格 e093f3b500a3a9e59eca40016e0edc24
4 - 添加四個戰(zhàn)略破折號 e093f3b5-00a3-a9e5-9eca-40016e0edc24
您只需執(zhí)行一次,因為其他 UUID 僅相差幾位數(shù)。
讀取 = e093f3b6-00a3-a9e5-9eca-40026e0edc24
寫入 = e093f3b7-00a3-a9e5-9eca-40036e0edc24
如果你的藍(lán)牙模塊看起來不同,你必須看看這個:
基本上,在 4:24,您必須導(dǎo)入 BLE 擴(kuò)展。為了節(jié)省您的搜索時間,您可以從此頁面下載最新版本。
以下是我們設(shè)想應(yīng)用程序的工作方式:
我們首先掃描 BLE 設(shè)備,然后我們使用計時器在稍有延遲后連接到 MAC 地址(您可以使用 RSL10 Sense and Control App 找到您的 MAC)。連接后,我們停止掃描,禁用計時器并啟用向上和向下按鈕。接下來,我們注冊字符串以偵聽 RSL10-SENSE-DB-GEVK 數(shù)據(jù)。我們需要一個將值寫回設(shè)備的過程。第一次使用此過程時,我們先發(fā)送 +1,然后發(fā)送 -1。這是啟動接收高度字符串強(qiáng)制刷新手機(jī)號碼所必需的。
同樣在這些塊中,我們有一個退出按鈕,以及幾個按鈕來增加和減少高度 50 英尺。收到字符串后,我們將刪除其中的括號并顯示當(dāng)前高度值。
我導(dǎo)出了 aia 文件,然后在本教程結(jié)束時將其上傳到項目存儲庫中的 Github。我試圖發(fā)布 appinventor 項目,但該網(wǎng)站不允許我發(fā)布。
硬件:
我非常喜歡 RSL10-SENSE-DB-GEVK 硬件,我考慮從本節(jié)開始而不是軟件。板上有五個孔,其中四個可用于 I2C 連接。我有一個 OLED 正在等待一個項目,所以我將它直接焊接到 RSL10-SENSE-DB-GEVK。
在嘗試將 ALTER 移動到我可以像手表一樣戴在手上的情況下,我設(shè)法打破了第一個 OLED 顯示屏。此外,我損壞了第二個顯示器,雪上加霜,我在此過程中破壞了 SCL 和 SDA 針孔。現(xiàn)在是個人的。
這里有幾個選項可以推進(jìn)項目:
- 像一些“制造商”在 YouTube 上做的那樣偽造它——如果你偽造它,你將永遠(yuǎn)無法做到
- 買一塊新板——它只有 50 塊骨頭,喲
- 使用 Arduino Pro Mini 從 RSL10-SENSE-DB-GEVK 上可用的最后一個引腳 (GIO) 獲取 UART 數(shù)據(jù),然后通過 Arduino 的 I2C 將其發(fā)送到 OLED
我開始沿著最后一個選項的路徑與我們尚未討論的另一個選項并行。
使用 Arduino Pro Mini 選項的問題之一是我擁有的兩個是 5V,與 RSL10-SENSE-DB-GEVK 或 OLED 電壓不兼容。我不僅要擴(kuò)大 CR2032 電源的尺寸以適應(yīng) OLED,還必須考慮另一塊板的電源要求。
我們將帶著懸念離開本節(jié),但在繼續(xù)下一節(jié)之前,我們將簡要討論一下外殼。
我必須能夠在瓶蓋內(nèi)安裝 Arduino Pro Mini 以及 RSL10-SENSE-DB-GEVK、OLED 和電池。最重要的是,它必須是藍(lán)色的。
固件:
當(dāng)我開始使用 Eclipse 時,我沒有任何使用經(jīng)驗,但是我能夠使用這個文檔進(jìn)行恢復(fù)出廠設(shè)置。我很快意識到我必須找到一個例子來修改和在這個項目中使用。
我選擇了“自定義服務(wù)固件”,因為它具有 BLE 和 BME680 代碼。它也沒有深度睡眠代碼帶來的并發(fā)癥。如果代碼太多,您可以隨時刪除或注釋掉,就像我們即將在這里做的那樣。如果這看起來工作量太大,請不要擔(dān)心,我在本教程結(jié)束時將最終的工作合并代碼上傳到 Github 項目存儲庫。
如果您想了解更多信息,請繼續(xù)閱讀,或者直接跳到下一部分。
就像 Audible Abby 一樣,ALTER 需要計算高度。我們將使用來自車載集成傳感器的壓力和溫度數(shù)據(jù)來計算地面以上值的變化。ALTER 還需要在 OLED 屏幕上顯示實時高度,但 ON Semiconductor IDE 中沒有示例說明如何做到這一點。我嘗試了幾件事,但拯救的是一個不太可能的項目,這是我在 2019 年唯一沒有贏得的比賽。
我從這里獲取了 5 個文件,并對其進(jìn)行了修改,以使它們與 RSL10-SENSE-DB-GEVK 一起使用,就像使用 Azure Sphere Starter-Kit 一樣。我將這些文件放在工作區(qū)的 2 個文件夾中:
- src\oled.c
- src\sd1306.c
- 包括\font.h
- 包括\oled.h
- 包括\sd1306.h
運行代碼會導(dǎo)致一些錯誤,這很好,因為我可以注釋掉導(dǎo)致問題的代碼。這是我為清理這個爛攤子所做的事情:
- sd1306.h像這樣注釋掉第 8 行和第 9 行//#include "i2c.h" //#include 并添加#include
- oled.h像這樣注釋掉第 9、10、11 和 58 行//#include "applibs_versions.h" //#include //#include "deviceTwin.h" //uint8_t SSID[ WIFICONFIG_SSID_MAX_LENGTH];
- oled.c像這樣注釋掉第 24、25、26、27、64、65、66、67 和 287行 //extern uint8_t oled_ms1[CLOUD_MSG_SIZE]; //extern uint8_t oled_ms2[CLOUD_MSG_SIZE]; //extern uint8_t oled_ms3[CLOUD_MSG_SIZE]; //extern uint8_t oled_ms4[CLOUD_MSG_SIZE]; //sd1306_draw_string(OLED_LINE_1_X, OLED_LINE_1_Y, oled_ms1, FONT_SIZE_LINE, white_pixel); //sd1306_draw_string(OLED_LINE_2_X, OLED_LINE_2_Y, oled_ms2, FONT_SIZE_LINE, white_pixel); //sd1306_draw_string(OLED_LINE_3_X, OLED_LINE_3_Y, oled_ms3, FONT_SIZE_LINE, white_pixel); //sd1306_draw_string(OLED_LINE_4_X, OLED_LINE_4_Y, oled_ms4, FONT_SIZE_LINE, white_pixel); //sd1306_draw_string(sizeof(str_SSID)*6, OLED_LINE_1_Y, network_data.SSID, FONT_SIZE_LINE, white_pixel);
- sd1306.c我們這里有幾行不能只注釋掉;我們必須找到替代品。第 48 行變?yōu)椋?/font>retval = HAL_I2C_Write(addr, data_to_send, 2, false); //I2CMaster_Write(i2cFd, addr, data_to_send, 2); 第 73 行變?yōu)椋?/font>retval = HAL_I2C_Write(addr, data_to_send, 1025, false); //I2CMaster_Write(i2cFd, addr, data_to_send, 1025);
- font.h我確實修改了該文件以使 0 和 1 看起來更好。您會認(rèn)為微控制器可以使這兩個正確!{0x3E, 0x51, 0x49, 0x45, 0x3E} 變?yōu)?{0x3E, 0x41, 0x41, 0x41, 0x3E} {0x04, 0x02, 0x7F, 0x00, 0x00} 變?yōu)?{0x00, 0x02, 0x7F, 0x00, 0x00}
您會在 oled.c 中找到的另一件事是從第 698 行開始的徽標(biāo)?;ヂ?lián)網(wǎng)上有很多關(guān)于如何創(chuàng)建自己的 OLED 徽標(biāo)的教程。我使用了 LCDAssistant ,但您也可以使用http://javl.github.io/image2cpp/這是一個在線解決方案,可以將圖像轉(zhuǎn)換為 C 可以理解的數(shù)字。
在我們繼續(xù)固件之前,讓我們回到硬件部分。還記得我說過我沒有 SCL 或 SDA 嗎?這意味著 src\sd1306.c 中的第 48 行和第 73 行將無法向 OLED 發(fā)送任何內(nèi)容。我剛剛添加了它們,因為你可能還有你的 I2C 引腳。
如果你想使用 UART,你必須在里面找到并修改 PinNames.h
C:\Users\<...>\PACK\ONSemiconductor\BDK\1.12.1\include\target\RSL10_SENSE將PIN_UART_TX = NC 和 PIN_GIO_SPARE = PIN_DIO3替換為PIN_UART_TX = PIN_DIO3 和 PIN_GIO_SPARE = NC
由于我也沒有使用 UART,正如您很快就會發(fā)現(xiàn)的那樣,我對 PinNames.h 所做的唯一更改是 PIN_BUTTON0 = NC 和 PIN_GIO_SPARE = NC。
UART 對我來說是 B 計劃,因為我正在努力制作與 I2C 功能相似的東西。就在那時我發(fā)現(xiàn)了 Bit Banging(是的,它聽起來很酷)。那里有很多 Bit Bangers,但我發(fā)現(xiàn)Kevin Darrah的教程對于理解 I2C 協(xié)議的基礎(chǔ)知識非常有用。我還必須使用GreatScott的教程來學(xué)習(xí)端口操作的概念。RSL10-SENSE-DB-GEVK 不是 Arduino,因此,我不得不相應(yīng)地調(diào)整代碼。想知道為什么我們需要端口操作嗎?
您可能會說“UART 只需要一根線,但 I2C 需要兩根線。您只剩下一個位置可以在板上焊接一根線。您將如何實現(xiàn) Bit Banging I2C?” 我回復(fù):
ICYMI,我將一根電線焊接到一個按鈕的未接地側(cè)。
在 sd1306.c 第 49 行現(xiàn)在是:retval = SWI2C(data_to_send, 2); 現(xiàn)在第 74 行是:retval = SWI2C(data_to_send, 1025);
我們還需要兩個文件:BitBanging.c 和 BitBanging.h。確保將 #include 添加到 main.c。您還應(yīng)該添加 BitBanging_Init(); 在無限循環(huán)和 SendAltitudeToDisplay() 之前;在里面。
在 C:\Users\<...>\PACK\ONSemiconductor\BDK\1.12.1\source\firmware\BoardSupport\hb\src\ics 中找到 CS.c 并在頂部添加以下行:
#include <BitBanging.h>
#include
int InitialAlt = -9999;
int OffsetAlt;
int AGL;
int PreviousAGL = -9999;
您還需要添加幾個程序:
int CalculateAltitude(float P, float T) {
// Get Altitude from Pressure and Temperature
return (int) ((pow(P / 101.325, 0.190223) - 1) * (T * 280.4137 + 128897.8));
}
void SendAltitudeToDisplay(void) {
// Save the response values
float ResponseP, ResponseT;
// Send a request in a specific format
cs.node[1]->request_handler((struct CS_Request_Struct[] ) {{ "5", "EV", "P" }}, cs_node_response);
// Save Pressure value
ResponseP = atof(&cs_node_response[2]);
if (ResponseP != 0.00) {
// Send a request in a specific format
cs.node[1]->request_handler((struct CS_Request_Struct[] ) {{ "6", "EV","T" }}, cs_node_response);
// Save Temperature value
ResponseT = atof(&cs_node_response[2]);
// Right align text on OLED
char TextBuffer[5];
// Check if baseline altitude has been set
if (InitialAlt == -9999) {
// Set baseline
InitialAlt = CalculateAltitude(ResponseP, ResponseT);
} else {
// Measure from baseline and take into account external Altitude adjustment
AGL = InitialAlt - CalculateAltitude(ResponseP, ResponseT) + OffsetAlt;
// Less than 1000 feet
if (AGL < 1000) {
// Print into 4 places to right align text on OLED
snprintf(TextBuffer, sizeof(TextBuffer), "%4d", AGL);
} else {
// Less than 10000
if (AGL < 10000) {
// Print whole number into two places and one after the decimal
snprintf(TextBuffer, sizeof(TextBuffer), "%2d.%d",AGL / 1000, AGL % 1000 / 100);
} else {
// Just use all of OLED
snprintf(TextBuffer, sizeof(TextBuffer), "%d.%d",AGL / 1000, AGL % 1000 / 100);
}
}
// Send to OLED if it has been more than 0.2 seconds since last update
////if (HAL_Time() - TimeStamp > 200) {
//sd1306_draw_string(0, 15, TextBuffer, 5, white_pixel);
// Loop through digits
for (uint16_t k = 0; k < 4; k++) {
// Remove ASCII offset
char digit = TextBuffer[k] - 48;
// Adjust if decimal point or negative
if (digit < 0) digit = digit + 13;
// Loop through pages
for (uint16_t j = 0; j < 8; j++)
// Columns of each page
for (uint16_t i = j * 128; i < j * 128 + 32; i++)
// Copy to OLED buffer in specific order
if (digit >= 0)
oled_buffer[i + k * 32] = Image_num_bmp[i - (j * 128) + (j * 32) + (digit * 256)];
else
// If blank
oled_buffer[i + k * 32] = 0x00;
}
// Send OLED buffer to sd1306
WriteBufferToDisplay();
// Send via BLE only if AGL value has changed
if (PreviousAGL != AGL) CS_PlatformWrite(TextBuffer, sizeof(TextBuffer));
TimeStamp = HAL_Time();
PreviousAGL = AGL;
////}
}
}
}
此外,在 CS.c 中,您需要將以下內(nèi)容添加到 CS_Loop(當(dāng)然,在“int errcode, bytes, i;”之后)
// Read available BLE packet
memset(cs_rx_buffer, 0, 21);
CS_PlatformRead(cs_rx_buffer, 21, &bytes);
// New packet available
if (bytes > 0) {
// New AGL offset
OffsetAlt = OffsetAlt + atoi(cs_rx_buffer);
// Fore update BLE
PreviousAGL = -9999;
}
// We're done here
return 0;
我插入了 x = x+ 大??;在 sd1306.c 的第 770 行,只是為了在數(shù)字之間添加一些空格。最后,注釋掉 main.c 中的以下幾行以獲得急需的速度:ASSERT_ALWAYS(CSN_ALS_CheckAvailability() == true); ASSERT_ALWAYS(CS_RegisterNode(CSN_ALS_Create()) == CS_OK); ASSERT_ALWAYS(CSN_AO_CheckAvailability() == true); ASSERT_ALWAYS(CS_RegisterNode(CSN_AO_Create()) == CS_OK); ASSERT_ALWAYS(CS_RegisterNode(CSN_PB_Create()) == CS_OK);
TL;博士:
。
。
結(jié)論:
在構(gòu)建這個項目時,我花了數(shù)百個小時享受樂趣和學(xué)習(xí)。在沒有任何特殊門戶、額外的 MCU 甚至外部傳感器的情況下,我能夠如此快速地推出最小可行產(chǎn)品給我留下了深刻的印象。對我來說,這真的很強(qiáng)大。回顧之前的比賽,很多提交的作品都是使用硬件和軟件,幾乎沒有修改,但這不是我的 MO 同時,我希望我的定制是可重現(xiàn)和可維護(hù)的,啟用 RSL10-SENSE-DB-GEVK 的靈活性我來改變我的想法。
ALTER 只是一個開始,可以擴(kuò)展到記錄跳躍、總自由落體時間、垂直速度等。它也可以被修改以供飛行員使用,他們通過 BLE 應(yīng)用程序更新氣壓以獲得飛行中的準(zhǔn)確高度在 OLED 顯示屏上。天空才是極限!
我希望你發(fā)現(xiàn)這個項目很有用,并且和我一樣喜歡它。我不希望看到很多使用 BLE、OLED 甚至 GPIO 的提交。因此,我希望安森美半導(dǎo)體可以使用這個項目或其中的一部分作為示例,讓其他人從中受益并在此基礎(chǔ)上再接再厲。
?
- 火箭高度計開源硬件
- 基于Arduino的9美元可聽高度計
- 如何構(gòu)建藍(lán)牙低能耗跳傘高度計
- 針對汽車無線連接應(yīng)用市場,TI再推 SimpleLink? 低能耗藍(lán)牙產(chǎn)品
- ERM和LRA觸覺參考設(shè)計 具有Bluetooth reg低能耗遠(yuǎn)程
- UART至Bluetooth reg低能耗(BLE)橋參考設(shè)計
- 探討高度計在健身追蹤器中的作用 17次下載
- KT6368A藍(lán)牙低能耗標(biāo)準(zhǔn)電路原理圖免費下載 22次下載
- BLE藍(lán)牙低能耗模塊測試報告的詳細(xì)資料說明 23次下載
- 基于模糊控制的低能耗分簇協(xié)議 10次下載
- 基于低能耗的觸摸感應(yīng)延長電池壽命的解決方法 11次下載
- 用于電子產(chǎn)品的硅高度計的設(shè)計 6次下載
- 基于CC2541的藍(lán)牙低能耗2.4GHz應(yīng)用 28次下載
- 藍(lán)牙低能耗技術(shù)并不僅僅是另一種藍(lán)牙技術(shù)——它是一種全新的技術(shù) 3次下載
- 低能耗三輸入AND_XOR門的設(shè)計 0次下載
- MS4525DO-SS3BJ015AS氣壓計怎么換算高度 476次閱讀
- 產(chǎn)品介紹:i.MX 93應(yīng)用處理器,賦能更加安全智能的邊緣應(yīng)用 1420次閱讀
- 基于多組分的WLED結(jié)構(gòu)的特點 1132次閱讀
- 基于Arduino UNO和HC-05藍(lán)牙模塊控制伺服電機(jī) 4824次閱讀
- dfrobot模擬聲級計/分貝計/噪音計簡介 2152次閱讀
- dfrobot模擬PH計 (Arduino兼容)簡介 1944次閱讀
- 基于容量證明的共識機(jī)制PoC介紹 2096次閱讀
- 如何才能使用CC2541藍(lán)牙模塊與單片機(jī)進(jìn)行串口通信 1.1w次閱讀
- 新能源汽車在炎熱的夏天安全性能如何 683次閱讀
- 片上光網(wǎng)絡(luò)及其關(guān)鍵低能耗光子集成器件 2033次閱讀
- 如何制作一個帶藍(lán)牙功能的電子體溫計? 1.2w次閱讀
- 植物工廠關(guān)鍵技術(shù)及系統(tǒng)集成或?qū)ED植物照明技術(shù)助推到新的高度 1.1w次閱讀
- 基于低能耗藍(lán)牙的半雙工語音通信 1625次閱讀
- 支持藍(lán)牙連接的低能耗可穿戴醫(yī)療健康參考設(shè)計精選 733次閱讀
- 技術(shù)前瞻:未來冷存儲技術(shù)解決方案 1724次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多