資料介紹
功能性
該設(shè)備易于客戶使用,也易于旅游公司設(shè)置,只需幾分鐘,設(shè)備即可啟動并準(zhǔn)備運行。在下雨或晴天時,CityGuide 將引導(dǎo)任何人穿過城市。
該設(shè)備操作非常簡單;使用 Sony Spresense 的機(jī)載 GNSS 模塊,它可以檢索個人的當(dāng)前位置并對其進(jìn)行處理,以查看他們是否位于地圖上的某個地標(biāo)處。如果用戶在標(biāo)記的位置;將播放地標(biāo)的適當(dāng)錄音,簡要告??知客戶他們所看到的背景。下圖顯示了功能概述。
設(shè)置概述
供應(yīng)商,在我們的例子中是旅游公司,必須在使用設(shè)備之前設(shè)置設(shè)備(在構(gòu)建項目部分中找到設(shè)置項目的分步指南)。他們必須規(guī)劃用戶可以訪問的地標(biāo)地圖,并記錄用戶到達(dá)所選地標(biāo)時將播放的曲目。所有這些數(shù)據(jù)都必須放在 SD 卡上,然后輸入到設(shè)備中。
設(shè)備啟動
該設(shè)備需要在 SD 卡中輸入啟動時所需的所有數(shù)據(jù)。在這里,設(shè)備將讀取給定的數(shù)據(jù),提取每個地標(biāo)的位置,以及用戶在給定位置時要播放的名稱和 mp3 文件,并將數(shù)據(jù)保存到變量中。
然后設(shè)備將在所有提供的位置周圍創(chuàng)建一個網(wǎng)格,該網(wǎng)格將用于將用戶的當(dāng)前地理位置與地標(biāo)的位置進(jìn)行比較,以便查看用戶是否位于地標(biāo)處。
播放文件
如果設(shè)備可以確認(rèn)用戶在地標(biāo)處,它會播放該地標(biāo)的文件并將音頻輸出到耳機(jī)插孔。如果兩個網(wǎng)格共享相同的位置,設(shè)備將播放它遇到的第一個地標(biāo)的文件。
代碼概述
下圖說明了項目的代碼概述。
-
Get File Data
從設(shè)備管理器提供的 SD 文件中檢索數(shù)據(jù)并進(jìn)行處理。 -
Get GPS
從 GNSS 模塊讀取當(dāng)前地理位置。 -
If(GPS)
檢查是否已從連接的衛(wèi)星接收到新的 GPS 數(shù)據(jù),以及衛(wèi)星是否已修復(fù)。 -
Compare with Locations
將接收到的地理位置與用戶輸入的地標(biāo)的地理位置進(jìn)行比較。 -
If(atLandmark)
如果當(dāng)前地理位置位于圍繞輸入的地理位置生成的網(wǎng)格內(nèi),則觸發(fā)。 -
Play Audio
為客戶端所在的地標(biāo)播放適當(dāng)?shù)囊纛l文件。
調(diào)試 LED
Spresense 板配備了 4 個調(diào)試 LED,其中 3 個被該應(yīng)用程序用于調(diào)試目的。
- LED 1是上圖頂部的第一個 LED。它用于指示設(shè)備的當(dāng)前狀態(tài)。它在設(shè)備設(shè)置時閃爍,然后在算法運行時保持亮起。
- LED 2為 GNSS 狀態(tài) LED,用于指示當(dāng)前 GNSS 狀態(tài)。當(dāng)設(shè)備正在搜索衛(wèi)星且尚未接收 GPS 數(shù)據(jù)時,LED 會閃爍;當(dāng)設(shè)備鎖定到衛(wèi)星并正在接收可靠的地理定位數(shù)據(jù)時,LED 會保持亮起;如果設(shè)備未使用 GNSS,則 LED 會熄滅。
- LED 3指示當(dāng)前是否正在播放 mp3 文件。它會在播放設(shè)置時閃爍,并在播放文件時保持亮起,在沒有播放時熄滅。
播放概述
當(dāng)音頻文件正在運行時,設(shè)備必須停止 GNSS 模塊,因為 GNSS 和音頻庫不能一起運行,在所有衛(wèi)星連接的情況下播放完文件后,GNSS 將恢復(fù)。
用戶可以使用提供的電位器來切換設(shè)備的音量。
。但是也可以瀏覽這些圖像,因為它們非常好。
?
該設(shè)備的設(shè)計方式使得一個位置只能訪問一次。到達(dá)該位置后,將播放該文件并將該位置標(biāo)記為已看到,這可以防止該文件在客戶端第二次到達(dá)同一位置時播放。
好處
改用 CityGuide 的公司將受益于:
- 更大的自主權(quán)和易于設(shè)置
- 降低成本
- 快速部署
- 吸引客戶的專業(yè)方式
使用 CityGuide 的個人將受益于:
- 更快速地游覽這座城市
- 以他們的速度觀光
- 選擇要參觀的地標(biāo)
- 集體或單獨參觀
構(gòu)建項目
第1 步:所需設(shè)備
該項目不需要很多組件,因為大部分所需的傳感器和模塊都內(nèi)置在 Spresense 板中,材料清單如下。
- 1、索尼Spresense板
- 1、電位器
- 1、面包板
- 1、SD卡
- 耳機(jī)/耳機(jī)
- 跳線
第 2 步:連接電路
所要做的就是將電位計連接到 Spresense 板上,原理圖如下所示。
焊接電位器
由于用戶不會隨身攜帶面包板,因此必須將電位器焊接到 Spresense 板上。下面是一些焊接圖片。
第 3 步:安裝 Arduino Spresense 庫
首先,我們需要包含使用 Arduino IDE 操作 Spresense 板所需的庫。使用板管理器可以輕松完成此操作。按照以下步驟指導(dǎo)您完成設(shè)置環(huán)境的步驟。
第 4 步:安裝端口實用程序
下面的指南將顯示下載和安裝所需的端口實用程序所需的步驟,以便從您的 Spresense 或向您的 Spresense 發(fā)送命令,反之亦然。本指南專為 Mac 用戶設(shè)計,使用此鏈接可幫助您在 PC 上安裝 Port Utility。
首先,為您的操作系統(tǒng)下載合適的實用程序。
請注意,Arduino 板無法在安裝實用程序的情況下運行,卸載它以在您的計算機(jī)上編程和使用 Arduino 或類似的板是至關(guān)重要的。
為了卸載VPC驅(qū)動程序。在 .dmg 文件中找到uninstaller.sh shell 腳本,然后使用Mac 上的終端運行它。這樣做;打開Terminal ,然后鍵入uninstaller.sh文件并將其ssh
拖放到 Terminal 窗口中。可能會要求您輸入密碼。
第 5 步:更新 Spresense 的固件
為了在您的 Spresense 開發(fā)板上運行項目;它需要更新到最新的固件。下面的指南說明了更新設(shè)備固件所需的步驟。
第 6 步:安裝 MP3 解碼器
為了在 Spresense 板上播放 MP3 文件,設(shè)備上需要一個 MP3 解碼器。該解碼器可以安裝在設(shè)備的 SPI 閃存或 SD 卡上。我們將把它安裝在閃存上,這樣我們就不需要特定的 SD 卡來運行該項目。下面的步驟說明了安裝解碼器的步驟。
第 7 步:設(shè)置 SD 卡
為了在您的項目中使用 SD 卡,必須將其適當(dāng)格式化為 FAT。下面的步驟顯示了如何在 Mac 上完成此操作。
第 8 步:準(zhǔn)備文件
現(xiàn)在我們必須在 SD 卡上設(shè)置文件,這些文件將用于識別設(shè)備的地標(biāo)并為其提供聲音文件以在特定地標(biāo)處播放。SD 卡上需要以下文件。
- Datalog.txt是管理員輸入地標(biāo)和相關(guān)數(shù)據(jù)的文本文件
- mp3文件用作設(shè)備到達(dá)適當(dāng)?shù)貥?biāo)時將播放的文件。
datalog.txt文件是設(shè)備的核心,項目運行所需的所有數(shù)據(jù)都包含在該文件中。經(jīng)理可以在地圖上添加任意數(shù)量的地標(biāo),他們所要做的就是在文件中為該地標(biāo)添加一行。下圖說明了必須格式化專用于地標(biāo)的線的方式。
-
GPO
是線上表示的地標(biāo)的名稱。它可以是任何東西,但不能包含空格。 -
53.349430,-6.260235
是地標(biāo)的地理位置,獲取這個位置在下面的指南中有描述。緯度和經(jīng)度由分號分隔,沒有空格。 -
fileA.mp3
是當(dāng)用戶位于特定位置時播放的文件,在我們的例子中是 GPO。請注意,名稱中不允許有空格,.mp3必須包含在末尾并且名稱不能包含數(shù)字。 - 每個部分之間包含一個空格。
記住上圖,我們可以開始自定義datalog.txt文件。下面的圖片將指導(dǎo)您完成整個過程。
第 9 步:確認(rèn)代碼
代碼有 3 個主要部分,每個部分都很大。
- 獲取標(biāo)清設(shè)置
- 獲取和處理 GPS
- 播放音頻文件
它們都在下面詳細(xì)介紹。
獲取標(biāo)清設(shè)置
void getData()
{
Serial.println("Getting Data");
Serial.println("________________________________________");
Serial.println("Locating File");
Serial.println(" OK - Preparing Variables");
int space = 0;
int comma = 0;
String localName[10];
String localSound[10];
String localRawLocation[10];
String localLatitude[10];
String localLongitude[10];
Serial.println(" OK - Opening File 'datalog.txt'");
myFile = SD.open("datalog.txt");
Serial.println(" OK - Verifying Presence");
if(myFile)
{
Serial.println(" Success - File Loaded");
Serial.println("");
Serial.println("Extracting Data");
Serial.println(" OK - Beginning Final Extraction");
while(myFile.available())
{
char c = myFile.read();
if(c == '\n')
{
newLine++;
}
else if(c == ' ')
{
space++;
}
else
{
if(space == 0)
{
localName[newLine] += c;
}
else if(space == 1)
{
if(c == ',')
{
comma++;
}
else if(comma == 0)
{
localLatitude[newLine] += c;
}
else
{
localLongitude[newLine] += c;
}
localRawLocation[newLine] += c;
}
else if(space == 2)
{
localSound[newLine] += c;
if(c == '3')
{
space = 0;
comma = 0;
}
}
}
}
// parse the local data into the struct
for(int i = 0; i < (newLine + 1); i++)
{
landmark[i].name = localName[i];
landmark[i].sound = localSound[i];
landmark[i].rawLocation = localRawLocation[i];
landmark[i].latitude = localLatitude[i].toFloat();
landmark[i].longitude = localLongitude[i].toFloat();
}
}
else
{
Serial.println(" Error - File not Present");
Serial.println(" OK - Terminating Algorithm");
Serial.println("________________________________________");
Serial.println("");
terminateLEDS();
while(1) {};
}
myFile.close();
Serial.println(" Success - Data Loaded Locally");
Serial.println("");
feedback();
drawGrid();
}
void feedback()
{
Serial.println("Data Feedback");
Serial.println(" OK - Dumping All Data");
Serial.println("");
for(int i = 0; i < (newLine + 1); i++)
{
Serial.print("Struct "); Serial.println(i);
Serial.print(" location name "); Serial.println(landmark[i].name);
Serial.print(" sound file "); Serial.println(landmark[i].sound);
Serial.print(" raw location "); Serial.println(landmark[i].rawLocation);
Serial.print(" latitude "); Serial.println(landmark[i].latitude, 4);
Serial.print(" longitude "); Serial.println(landmark[i].longitude, 4);
}
Serial.println("");
Serial.println(" Success - Data Dumped");
Serial.println("________________________________________");
Serial.println("");
}
void drawGrid()
{
Serial.println("Generating Grids");
Serial.println("________________________________________");
Serial.println("Mapping Grid Around Co-ordinates");
Serial.println(" OK - Looping through landmarks");
for(int i = 0; i < (newLine + 1); i++)
{
landmark[i].maxLat = landmark[i].latitude + 0.001;
landmark[i].minLat = landmark[i].latitude - 0.001;
landmark[i].maxLng = landmark[i].longitude + 0.001;
landmark[i].minLng = landmark[i].longitude - 0.001;
}
Serial.println(" Success - Grids Generated");
Serial.println("");
Serial.println("Dumping Grid Data");
Serial.println(" OK - Dumping Grid Data");
Serial.println("");
for(int i = 0; i < (newLine + 1); i++)
{
Serial.print("Struct "); Serial.println(i);
Serial.print(" max lat "); Serial.println(landmark[i].maxLat, 4);
Serial.print(" min lat "); Serial.println(landmark[i].minLat, 4);
Serial.print(" max lng "); Serial.println(landmark[i].maxLng, 4);
Serial.print(" min lng "); Serial.println(landmark[i].minLng, 4);
}
Serial.println("");
Serial.println(" Success - Data Dump Complete");
Serial.println("________________________________________");
Serial.println("");
}
這部分代碼由3個循環(huán)組成。總的來說,這部分從datalog.txt中讀取數(shù)據(jù)并進(jìn)行處理。
-
getData()
讀取文件并從中提取數(shù)據(jù),計算輸入的位置數(shù)以及所有這些位置的詳細(xì)信息。 -
feedback()
將接收到的數(shù)據(jù)打印到串行監(jiān)視器以允許用戶調(diào)試數(shù)據(jù)文件 -
drawGrid()
在所有輸入的地理位置周圍繪制一個網(wǎng)格,如果客戶端位于這些網(wǎng)格之一內(nèi),則設(shè)備會播放適當(dāng)?shù)穆曇粑募?/font>
獲取和處理 GPS
void startGPS(bool hot)
{
Serial.println("");
digitalWrite(LED0, HIGH);
Serial.println("Initialising GNSS");
Serial.println(" OK - Setting Debug");
gnss.setDebugMode(PrintInfo); // set the mode to print info
Serial.println("Initialising Module");
if(gnss.begin() != 0)
{
Serial.println(" Error - Module Failed to Initialise");
digitalWrite(LED0, LOW);
while(1) {};
}
else
{
Serial.println(" OK - Setting Elements");
gnss.select(QZ_L1CA);
gnss.select(QZ_L1S);
Serial.println(" OK - Starting Positioning");
if(hot)
{
if(gnss.start(HOT_START) != 0)
{
Serial.println(" Error - Start Failed");
digitalWrite(LED0, LOW);
while(1) {};
}
else
{
Serial.println(" Success - GNSS Setup Complete");
}
}
else
{
if(gnss.start(COLD_START) != 0)
{
Serial.println(" Error - Start Failed");
digitalWrite(LED0, LOW);
while(1) {};
}
else
{
Serial.println(" Success - GNSS Setup Complete");
}
}
}
digitalWrite(LED0, HIGH);
delay(500);
}
void processGPS(SpNavData *pNavData)
{
char dataBuffer[STRING_BUFFER_SIZE];
// print number of satellites
snprintf(dataBuffer, STRING_BUFFER_SIZE, "numSat:%2d, ", pNavData->numSatellites);
Serial.print(dataBuffer);
// print the location data
Serial.print(" ");
if(pNavData->posFixMode == FixInvalid)
{
Serial.print("NO FIX ");
}
else
{
Serial.print("FIX ");
}
if(pNavData->posDataExist == 0)
{
Serial.println("No Geolocation");
}
else
{
gpsLatitude = pNavData->latitude;
gpsLongitude = pNavData->longitude;
Serial.print(gpsLatitude, 6); Serial.print(","); Serial.println(gpsLongitude, 6);
checkLocation();
}
}
void checkLocation()
{
for(int i = 0; i < (newLine + 1); i++)
{
if(gpsLatitude <= landmark[i].maxLat && gpsLatitude >= landmark[i].minLat &&
gpsLongitude <= landmark[i].maxLng && gpsLongitude >= landmark[i].minLng )
{
if(landmark[i].visited)
{
Serial.println(" [1/2] Already Visited");
delay(500);
}
else
{
Serial.println(" [1/2] First Visit");
delay(1000);
Serial.println(" OK - Checking Data");
Serial.print(" landmark name "); Serial.println(landmark[i].name);
Serial.print(" landmark sound file "); Serial.println(landmark[i].sound);
Serial.println(" [2/2] Calling 'playFile' with audio file");
Serial.println(" OK - Calling Function");
Serial.println("");
attachFile(landmark[i].sound);
landmark[i].visited = true;
break;
}
}
}
}
這一段也是由3個循環(huán)組成。它負(fù)責(zé)設(shè)置和啟用 GNSS 模塊以及連接和檢索來自衛(wèi)星的數(shù)據(jù)。
-
startGPS()
初始化 GNSS 模塊,這不是在setup()
循環(huán)中完成的,因為 GNSS 模塊在播放音頻之前被禁用并且必須再次啟用。 -
processGPS()
在void()
循環(huán)中進(jìn)行讀取后處理 GNSS 模塊返回的數(shù)據(jù)并提取地理位置。 -
checkLocation()
根據(jù)先前生成的網(wǎng)格檢查 GNSS 模塊接收到的地理位置,以檢查客戶端是否位于地標(biāo)處。
播放音頻文件
void attachFile(String fileName)
{
Serial.println("");
Serial.println("Setting Up File");
Serial.println("________________________________________");
Serial.println("Finalising Setup");
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED2, LOW);
Serial.println("");
Serial.println("Locating File");
Serial.println(" OK - Opening File");
Serial.print(" OK - Locating "); Serial.println(fileName);
soundFile = SD.open(fileName);
if(!soundFile)
{
Serial.println(" Fatal Error - File Not Present");
Serial.println("________________________________________");
Serial.println("");
delay(500);
return;
}
else
{
Serial.println(" Success - File Located");
}
Serial.println("");
Serial.println("Analysing Format");
Serial.println(" OK - Getting Frames to Analyse");
int err = theAudio->writeFrames(AudioClass::Player0, soundFile);
Serial.println(" OK - Analysing Data");
if(err != AUDIOLIB_ECODE_OK)
{
Serial.println(" Fatal Error - File Formatation is Bad");
soundFile.close();
Serial.println("________________________________________");
}
else
{
Serial.println(" Success - Formatation is Good");
}
Serial.println("________________________________________");
Serial.println("");
playFile(fileName);
}
void playFile(String fileName)
{
Serial.println("Playing File");
Serial.println("________________________________________");
Serial.println(" OK - Pausing GNSS");
gnss.stop();
Serial.print("Playing "); Serial.println(fileName);
theAudio->startPlayer(AudioClass::Player0);
digitalWrite(LED2, HIGH);
while(1) // main playback loop
{
Serial.print(".");
int rawPot = analogRead(A0);
int volume = map(rawPot, 0, 1024, -700, 0);
theAudio->setVolume(volume); // set the volume to the position of the potentiometer
int err = theAudio->writeFrames(AudioClass::Player0, soundFile);
if(err == AUDIOLIB_ECODE_FILEEND) // end of file record
{
Serial.println("");
break;
}
if(err)
{
Serial.println("");
Serial.println(" Error - Playback Error");
Serial.print(" OK - Error ID "); Serial.println(err);
break;
}
usleep(40000);
}
theAudio->stopPlayer(AudioClass::Player0);
soundFile.close();
digitalWrite(LED2, LOW);
Serial.println(" OK - Playback Terminated");
delay(500);
Serial.println(" OK - Restarting GNSS");
startGPS(true);
Serial.println("________________________________________");
Serial.println("");
delay(500);
}
這部分代碼控制mp3文件的播放,設(shè)置文件然后播放。
-
attachFile()
設(shè)置播放,它開始播放程序,檢查文件是否存在并驗證以確保 mp3 文件格式正確且?guī)勺x。 -
playFile()
通過禁用 GNSS 模塊開始播放,完成設(shè)置,然后實際播放文件,直到完成,用戶可以在文件播放時使用電位器控制播放音量。
設(shè)置變量
現(xiàn)在已經(jīng)描述了代碼,一些變量必須個性化,以便從項目中獲得最佳體驗。要編輯的第一個變量是proDebug
,此變量控制串行打印。如果啟用(設(shè)置為true
),則設(shè)備需要連接到計算機(jī)并啟用串行監(jiān)視器。默認(rèn)設(shè)置為false
,因為必須將其設(shè)置為false
才能在字段上操作。
第二個變量不需要實際編輯,但必須調(diào)整索引。名為的結(jié)構(gòu)Landmark
用于保存所有與地標(biāo)相關(guān)的數(shù)據(jù),下面包含具有該結(jié)構(gòu)的代碼片段。
struct Landmark
{
// strings
String name;
String sound;
String rawLocation;
// actual location
float latitude;
float longitude;
// grid co-ordinates
float maxLat;
float minLat;
float maxLng;
float minLng;
// extras
bool visited;
};
Landmark landmark[10];
如上所示,包括從名稱到是否已經(jīng)訪問過該位置的所有內(nèi)容。必須更改的是下面的聲明,它創(chuàng)建了一個結(jié)構(gòu)實例數(shù)組。目前,我有 10 個地標(biāo)的索引,經(jīng)理必須將此數(shù)字更改為他們已包含在文件中的地標(biāo)數(shù)量。如果少于 10 個,則可以保留原樣。就是這樣。
圖書館
- SDHCI - Copyright (c)2018 Sony Semiconductor Solutions Corporation根據(jù)GNU Lesser General PublicLicense這個庫在公共領(lǐng)域
- GNSS - Copyright (c)2018 Sony Semiconductor Solutions Corporation根據(jù)GNU Lesser General PublicLicense這個圖書館在公共領(lǐng)域
- 音頻- Copyright (c)2018 Sony Semiconductor Solutions Corporation根據(jù)GNU Lesser General PublicLicense這個圖書館在公共領(lǐng)域
最后
最后一步是將設(shè)備插入計算機(jī)并上傳草圖。功耗方面,我已經(jīng)將 Spresense 板連接到移動電源,它應(yīng)該可以使用幾次,然后才需要充電。
然后最后一步是封裝項目以使其可移植且美觀。我為該項目的外殼設(shè)計了一些快速示意圖,附在下面。
我制作了外殼并完成得很好。我最終得到了一個看起來像這樣的盒子。
所以在我完成原始盒子之后,是時候?qū)ζ溥M(jìn)行編輯并為電位器鉆一些孔并訪問板載 SD 卡模塊和板載耳機(jī)插孔。下面的步驟顯示了如何完成外殼并將設(shè)備安裝到其中。
所以現(xiàn)在,您已準(zhǔn)備好在現(xiàn)場使用該設(shè)備。請注意,在冷啟動時,設(shè)備需要大約 10 分鐘才能鎖定足夠多的衛(wèi)星來收集地理定位數(shù)據(jù)。就是這樣!
背景
我花了一段時間思考使用 Spresense 開發(fā)板的偉大項目。問題是你可以用 Spresense 板做任何東西,所以很難想出完美的想法。但我認(rèn)為我實現(xiàn)了一個偉大項目的想法。旅游方式的徹底改變。建立在你進(jìn)入博物館的設(shè)備上,當(dāng)你插入你正在看的東西的 ID 時,那個帶耳機(jī)的設(shè)備會告訴你你正在看的東西。
它剝離了這個想法,用一個自動系統(tǒng)代替手動按鈕選擇,當(dāng)客戶到達(dá)一個位置時播放。按照您的節(jié)奏創(chuàng)造未來的觀光。
?
- 《江蘇省城市照明智慧燈桿建設(shè)指南》 2019
- GBT_城市與社區(qū)可持續(xù)發(fā)展模型指南
- 船舶電氣設(shè)備維修指南.pdf 0次下載
- 開關(guān)電源設(shè)計指南.pdf 0次下載
- 基于開關(guān)電源的離線反激變換器設(shè)計指南 11次下載
- USB例程指南電子版下載 0次下載
- 傳感器系統(tǒng)的構(gòu)建與設(shè)計技巧資料下載
- 常用USB設(shè)備結(jié)構(gòu)分析資料下載
- SoMachine Basic軟件操作指南電子版 0次下載
- 如何設(shè)計一個網(wǎng)絡(luò)爬蟲程序進(jìn)行智慧城市研究的獲取與分析 9次下載
- LabView相機(jī)采集圖像指南 100次下載
- TMS320F28x 控制和中斷參考指南 6次下載
- TMS320x280x增強型脈寬調(diào)制器ePWM模塊參考指南 44次下載
- 面向便攜設(shè)備的白光LED驅(qū)動應(yīng)用指南 0次下載
- my-rio構(gòu)建工程指南_英版 0次下載
- 使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò) 412次閱讀
- 自動化設(shè)備的伺服電機(jī)選型指南 490次閱讀
- X-RAY檢測設(shè)備操作指南 385次閱讀
- 交換芯片的構(gòu)建方式 336次閱讀
- 《RT-Thread設(shè)備驅(qū)動開發(fā)指南》基礎(chǔ)篇--以先楫bsp的hwtimer設(shè)備為例 930次閱讀
- 鏡像構(gòu)建Dockerfile的介紹 1004次閱讀
- 如何利用ATmega328P構(gòu)建一個可靠的LoRa設(shè)備 5274次閱讀
- 一個易于構(gòu)建且成本極低的電子設(shè)備保護(hù)器電路圖 1025次閱讀
- 如何使用 Compose 進(jìn)行構(gòu)建 1667次閱讀
- Material Design指南中更新的相關(guān)內(nèi)容 1858次閱讀
- 什么是城市大腦?城市大腦是怎么破案的? 8955次閱讀
- 智慧城市包括哪些方面(智慧城市領(lǐng)域與內(nèi)容詳解) 17.2w次閱讀
- 如何打造智慧城市_發(fā)展智慧城市的意義何在 6.6w次閱讀
- 六道防線構(gòu)建平安城市新篇章 1628次閱讀
- 如何讓現(xiàn)代城市如何更智慧 585次閱讀
下載排行
本周
- 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次下載 | 免費
評論
查看更多