【摘要】 介紹curl調(diào)用網(wǎng)絡(luò)接口獲取天氣預(yù)報(bào),查看攝像頭設(shè)備接口,編譯網(wǎng)頁(yè)監(jiān)控開源庫(kù),在網(wǎng)頁(yè)上查看攝像頭圖像。
任務(wù)1:使用的網(wǎng)絡(luò)服務(wù)器接口
C語(yǔ)言:面向過(guò)程 、 面向?qū)ο?/strong>
1.?車牌號(hào)識(shí)別
2.?二維碼生成
3.?獲取北京時(shí)間
1.?調(diào)用網(wǎng)絡(luò)的接口的方式: (天氣預(yù)報(bào))
curl http://api.k780.com:88/?app=weather.future'&'weaid=南昌 '&&'appkey=10003'&'sign=b59bc3ef6191eb9f747dd4e83c99f2a4'&'format=json >123.txt |
注意: &是特殊的符號(hào),需要使用單引號(hào)或者雙引號(hào)括起來(lái)。
Curl: 命令行的瀏覽器。
2.?調(diào)用二維碼生成的接口
curl http://api.k780.com:88/?app=qr.get'&'data=www.wanbangee.com'&'level=L'&'size=6 >123.png |
??作業(yè):
1.?天氣預(yù)報(bào)查詢
查詢的格式: ./app <城市的中文名稱>

2.?獲取北京標(biāo)準(zhǔn)時(shí)間,顯示出來(lái)

3.?查詢手機(jī)號(hào)碼歸屬地
4.?二維碼生成創(chuàng)建 運(yùn)行格式: ./app <生成的二維碼內(nèi)容>
生成之后直接顯示在屏幕上。可以使用eog命令
5.?車牌號(hào)的識(shí)別
6.?調(diào)用百度地圖API接口 ,模擬實(shí)現(xiàn)導(dǎo)航的效果。
(1)?Eog命令圖片瀏覽器
(2)?鬧鐘信號(hào)一秒鐘中斷一次
(3)?實(shí)時(shí)改變經(jīng)緯度的參數(shù)
7.?分析cjson源代碼,參考cjson源碼改進(jìn)數(shù)據(jù)解析方式。
# gcc cJSON.c cJSON.h test.c -lm //編譯的方式 |
使用cjson提供的函數(shù)去解析天氣預(yù)報(bào)、北京時(shí)間這些json格式的數(shù)據(jù)。
??JSON語(yǔ)法規(guī)則:
1.?大括號(hào){}表示對(duì)象
2.?雙引號(hào)表示的字符串
3.?冒號(hào)后面保存的是數(shù)據(jù)值,前面表示數(shù)據(jù)值的名稱
4.?中括號(hào)[]表示數(shù)組
5.?數(shù)據(jù)之間使用逗號(hào)隔開
編譯cjson庫(kù)的方式: # gcc app.c cJSON.c -lm
??Cjson分析
//核心結(jié)構(gòu)體 typedef struct cJSON { struct cJSON *next,*prev; struct cJSON *child; int type; //保存的數(shù)據(jù)的類型 char *valuestring; //字符串類型的值 if type==cJSON_String int valueint; //int類型的值 if type==cJSON_Number double valuedouble;//浮點(diǎn)類型的值 char *string; //字符串類型 } cJSON; |
void cJSON_Delete(cJSON *c); //釋放空間 int cJSON_GetArraySize(cJSON *array); //獲取數(shù)組大小 cJSON *cJSON_GetArrayItem(cJSON *array,int item); //獲取數(shù)組每個(gè)下標(biāo)內(nèi)容 extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string); //獲取對(duì)象的節(jié)點(diǎn)數(shù)據(jù) cJSON *cJSON_Parse(const char *value); //載入源數(shù)據(jù),獲取根對(duì)象 |
目前階段和后面的學(xué)習(xí)階段: 分析源碼,看源碼。
#define 預(yù)編譯 typedef
1.?獲取QQ頭像,QQ名稱這些功能使用腳本去寫代碼。
獲取QQ名稱接口:http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=QQ號(hào)碼 獲取QQ頭像接口:http://qlogo4.store.qq.com/qzone/1126626497/1126626497/100?1126626497 |
2.?獲取百度地圖的接口數(shù)據(jù)
http://api.map.baidu.com/staticimage/v2?ak=vvjkqKyqSFwLgnfg0I0sXzyCDDFWFykb&mcode=666666¢er=110.403874,19.914888&width=300&height=200&zoom=11 |
3.?獲取全景地圖
http://api.map.baidu.com/panorama/v2?ak=vvjkqKyqSFwLgnfg0I0sXzyCDDFWFykb&width=512&height=256&location=116.313393,40.04778&fov=180 |
4.?獲取高清靜態(tài)地圖
http://api.map.baidu.com/staticimage/v2?ak=vvjkqKyqSFwLgnfg0I0sXzyCDDFWFykb&mcode=666666¢er=116.403874,39.914888&width=1024&height=512&zoom=18&scale=1 |
5.?出行線路規(guī)劃

6.?字符串與其他格式數(shù)據(jù)之間轉(zhuǎn)換
#include int atoi(const char *nptr); //字符串轉(zhuǎn)整數(shù) #include double atof(const char *nptr); //字符串轉(zhuǎn)浮點(diǎn)數(shù) #include int sprintf(char *str, const char *format, ...); //整數(shù)轉(zhuǎn)為字符串 int sscanf(const char *str, const char *format, ...); //字符串轉(zhuǎn)為整數(shù) |
示例1:
#include #include #include #include #include #include int main(int argc,char **argv) { char buff[100]; //整數(shù)轉(zhuǎn)為字符串 sprintf(buff,"%d",12345); printf("buff=%s\n",buff);
//浮點(diǎn)數(shù)轉(zhuǎn)為字符串 sprintf(buff,"%f",12345.12345); printf("buff=%s\n",buff);
//字符串拼接 sprintf(buff,"%s加%s","123","456"); printf("buff=%s\n",buff);
return 0; } |
示例2:
#include #include #include #include #include #include int main(int argc,char **argv) { //字符串轉(zhuǎn)整數(shù) int data; sscanf("1234","%d",&data); printf("data=%d\n",data);
//字符串轉(zhuǎn)浮點(diǎn)數(shù) float dataf; sscanf("116.403874,39.914888","%f",&dataf); printf("dataf=%f\n",dataf); return 0; } |
任務(wù)2:攝像頭操作方式
Linux、windows這些系統(tǒng)下很多攝像頭都是免驅(qū)(UVC)。
v4l2 :免驅(qū)攝像頭框架----一堆結(jié)構(gòu)體。
Linux下開發(fā)攝像頭的不同角度問(wèn)題:(嵌入式開發(fā))
1.?上層軟件系統(tǒng)開發(fā)(系統(tǒng)編程),控制驅(qū)動(dòng)提供的接口使用攝像頭。
2.?底層硬件系統(tǒng)開發(fā)(驅(qū)動(dòng)編程),直接控制攝像頭采集數(shù)據(jù)。
攝像頭功能:將采集到的圖像數(shù)據(jù)轉(zhuǎn)為二進(jìn)制數(shù)據(jù)返回。
驅(qū)動(dòng)的代碼集成在操作系統(tǒng)里。
在操作系統(tǒng)里使用攝像頭步驟:學(xué)習(xí)接口函數(shù)的調(diào)用。
fread(); read();
Linux下是一切設(shè)備皆文件: 攝像頭、網(wǎng)卡、聲卡、鼠標(biāo)、鍵盤………………….
Linux下設(shè)備文件存放的位置: /dev目錄下。
在虛擬機(jī)跑Linux,使用外設(shè)設(shè)備都需要單獨(dú)掛載才可以使用。
??掛載攝像頭:

??查看攝像頭的設(shè)備節(jié)點(diǎn):
[root@wbyq /]# ls /dev/video* /dev/video0 /dev/video1 |
??遠(yuǎn)程網(wǎng)頁(yè)視頻監(jiān)控示例
libjpeg-turbo-1.2.1.tar.gz : 將圖片數(shù)據(jù)可以壓縮成jpeg數(shù)據(jù)流。Jpg圖片。
mjpg-streamer-r63.tar.gz : 采集攝像頭的數(shù)據(jù),進(jìn)行處理。
一張240*320的24位色bmp圖片大小: 240*320*3
第一步:編譯libjpeg-turbo 1. 解壓:libjpeg-turbo-1.2.1.tar.gz 2. 生成Makefile(如果報(bào)錯(cuò),就安裝報(bào)錯(cuò)提示安裝包):./configure 3. 編譯安裝:make && make install 4. 將生成lib和include目錄下的文件拷貝到/usr目錄下的對(duì)應(yīng)文件夾 第二步:編譯mjpg-streamer-r63 1.直接make進(jìn)行編譯 2.運(yùn)行程序:./mjpg_streamer -i "/work/mjpeg/mjpg-streamer-r63/input_uvc.so -f 10 -r 800*480 -y" -o "/work/mjpeg/mjpg-streamer-r63/output_http.so -w www" 注意: 可以使用電腦自帶的攝像頭。在虛擬機(jī)的右下角進(jìn)行將windows系統(tǒng)的攝像頭掛載到Linux系統(tǒng) 3. 在瀏覽器里輸入地址進(jìn)行查看攝像頭: 例如:192.168.11.123:8080 |
作業(yè):
1.?將遠(yuǎn)程攝像頭監(jiān)控的代碼編譯運(yùn)行實(shí)現(xiàn)效果。
(1)?修改端口號(hào)。 8080不能作為公網(wǎng)的端口訪問(wèn)。
(2)?修改線程數(shù)量。
(3)?分析下線程的函數(shù)實(shí)現(xiàn)原理。
(4)?使用花生殼軟件實(shí)現(xiàn)公網(wǎng)監(jiān)控
2.?學(xué)習(xí)攝像頭的使用
攝像頭實(shí)現(xiàn)拍照源程序流程:(50%程序?qū)W過(guò)的)
1.?打開攝像頭的設(shè)備文件 open(“/dev/xxx”);
2.?獲取攝像頭參數(shù)。判斷攝像頭是否支持一些特有的操作。read
3.?配置攝像頭的參數(shù)。(1) 輸出的源數(shù)據(jù)格式RGB888 (2) 輸出的圖像尺寸
RGB888:數(shù)字?jǐn)?shù)據(jù)格式
其他格式: YUV 模擬數(shù)據(jù)格式
4.?判斷攝像頭的參數(shù)是否設(shè)置成功。
5.?讀取攝像頭的數(shù)據(jù)。 隊(duì)列的形式。
6.?將讀取的YUV格式數(shù)據(jù)轉(zhuǎn)為RGB格式
7.?將RGB格式數(shù)據(jù)編碼為BMP格式的圖片存放到電腦上
??擴(kuò)展練習(xí):制作貪吃蛇游戲。
-
接口
+關(guān)注
關(guān)注
33文章
9005瀏覽量
153756 -
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213815 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7815瀏覽量
90963
發(fā)布評(píng)論請(qǐng)先 登錄
如何在RakSmart服務(wù)器上用Linux系統(tǒng)部署DeepSeek
飛凌嵌入式ElfBoard ELF 1板卡-Linux設(shè)備驅(qū)動(dòng)的分類
curl wget bond:深入解析命令行工具的差異與應(yīng)用場(chǎng)景
如何使用 cURL 測(cè)試 HTTP 協(xié)議
Linux開發(fā)怎么學(xué)?
Linux網(wǎng)絡(luò)協(xié)議棧的實(shí)現(xiàn)

嵌入式linux開發(fā)板怎么操作
嵌入式linux開發(fā)板芯片的工作原理
linux開發(fā)板與樹莓派的區(qū)別
linux開發(fā)板如何編譯curl
Linux 驅(qū)動(dòng)開發(fā)與應(yīng)用開發(fā),你知道多少?

在Linux中查看IP地址的方法

記一次JSF異步調(diào)用引起的接口可用率降低

評(píng)論