0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux开发_curl调用网络接口

DS小龙哥-嵌入式技术 2022-09-17 15:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

【摘要】 介绍curl调用网络接口获取天气预报,查看摄像头设备接口,编译网页监控开源库,在网页上查看摄像头图像。

任务1:使用的网络服务器接口

C语言:面向过程 、 面向对象

1.​车牌号识别

2.​二维码生成

3.​获取北京时间

1.​调用网络的接口的方式: (天气预报)

curl http://api.k780.com:88/?app=weather.future'&'weaid=南昌

'&&'appkey=10003'&'sign=b59bc3ef6191eb9f747dd4e83c99f2a4'&'format=json >123.txt

注意: &是特殊的符号,需要使用单引号或者双引号括起来。

Curl: 命令行的浏览器。

2.​调用二维码生成的接口

curl http://api.k780.com:88/?app=qr.get'&'data=www.wanbangee.com'&'level=L'&'size=6 >123.png

​作业:

1.​天气预报查询

查询的格式: ./app <城市的中文名称>

poYBAGMlPdSAC-WrAAA4mjEWJsA399.png

2.​获取北京标准时间,显示出来

pYYBAGMlPdSAKYDOAAAMsIAQj18367.png

3.​查询手机号码归属地

4.​二维码生成创建 运行格式: ./app <生成的二维码内容>

生成之后直接显示在屏幕上。可以使用eog命令

5.​车牌号的识别

6.​调用百度地图API接口 ,模拟实现导航的效果。

(1)​Eog命令图片浏览器

(2)​闹钟信号一秒钟中断一次

(3)​实时改变经纬度的参数

7.​分析cjson源代码,参考cjson源码改进数据解析方式。

# gcc cJSON.c cJSON.h test.c -lm //编译的方式

使用cjson提供的函数去解析天气预报、北京时间这些json格式的数据。

​JSON语法规则:

1.​大括号{}表示对象

2.​双引号表示的字符串

3.​冒号后面保存的是数据值,前面表示数据值的名称

4.​中括号[]表示数组

5.​数据之间使用逗号隔开

编译cjson库的方式: # gcc app.c cJSON.c -lm

​Cjson分析

//核心结构体

typedef struct cJSON {

struct cJSON *next,*prev;

struct cJSON *child;

int type; //保存的数据的类型

char *valuestring; //字符串类型的值 if type==cJSON_String

int valueint; //int类型的值 if type==cJSON_Number

double valuedouble;//浮点类型的值

char *string; //字符串类型

} cJSON;

void cJSON_Delete(cJSON *c); //释放空间

int cJSON_GetArraySize(cJSON *array); //获取数组大小

cJSON *cJSON_GetArrayItem(cJSON *array,int item); //获取数组每个下标内容

extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string); //获取对象的节点数据

cJSON *cJSON_Parse(const char *value); //载入源数据,获取根对象

目前阶段和后面的学习阶段: 分析源码,看源码。

#define 预编译 typedef

1.​获取QQ头像,QQ名称这些功能使用脚本去写代码。

获取QQ名称接口:http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=QQ号码

获取QQ头像接口:http://qlogo4.store.qq.com/qzone/1126626497/1126626497/100?1126626497

2.​获取百度地图的接口数据

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.​获取高清静态地图

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.​出行线路规划

poYBAGMlPdWAGMc9AACfcb9I5nc847.png

6.​字符串与其他格式数据之间转换

#include

int atoi(const char *nptr); //字符串转整数

#include

double atof(const char *nptr); //字符串转浮点数

#include

int sprintf(char *str, const char *format, ...); //整数转为字符串

int sscanf(const char *str, const char *format, ...); //字符串转为整数

示例1:

#include

#include

#include

#include

#include

#include

int main(int argc,char **argv)

{

char buff[100];

//整数转为字符串

sprintf(buff,"%d",12345);

printf("buff=%s\n",buff);


//浮点数转为字符串

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)

{

//字符串转整数

int data;

sscanf("1234","%d",&data);

printf("data=%d\n",data);


//字符串转浮点数

float dataf;

sscanf("116.403874,39.914888","%f",&dataf);

printf("dataf=%f\n",dataf);

return 0;

}

任务2:摄像头操作方式

Linux、windows这些系统下很多摄像头都是免驱(UVC)。

v4l2 :免驱摄像头框架----一堆结构体。

Linux下开发摄像头的不同角度问题:(嵌入式开发)

1.​上层软件系统开发(系统编程),控制驱动提供的接口使用摄像头。

2.​底层硬件系统开发(驱动编程),直接控制摄像头采集数据。

摄像头功能:将采集到的图像数据转为二进制数据返回。

驱动的代码集成在操作系统里。

在操作系统里使用摄像头步骤:学习接口函数的调用。

fread(); read();

Linux下是一切设备皆文件: 摄像头、网卡、声卡、鼠标、键盘………………….

Linux下设备文件存放的位置: /dev目录下。

在虚拟机跑Linux,使用外设设备都需要单独挂载才可以使用。

​挂载摄像头:

pYYBAGMlPdWAdsKDAAAtwifWChI034.png

​查看摄像头的设备节点:

[root@wbyq /]# ls /dev/video*

/dev/video0 /dev/video1

​远程网页视频监控示例

libjpeg-turbo-1.2.1.tar.gz : 将图片数据可以压缩成jpeg数据流。Jpg图片。

mjpg-streamer-r63.tar.gz : 采集摄像头的数据,进行处理。

一张240*320的24位色bmp图片大小: 240*320*3

第一步:编译libjpeg-turbo

1. 解压:libjpeg-turbo-1.2.1.tar.gz

2. 生成Makefile(如果报错,就安装报错提示安装包):./configure

3. 编译安装:make && make install

4. 将生成lib和include目录下的文件拷贝到/usr目录下的对应文件夹

第二步:编译mjpg-streamer-r63

1.直接make进行编译

2.运行程序:./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"

注意: 可以使用电脑自带的摄像头。在虚拟机的右下角进行将windows系统的摄像头挂载到Linux系统

3. 在浏览器里输入地址进行查看摄像头:

例如:192.168.11.123:8080

作业:

1.​将远程摄像头监控的代码编译运行实现效果。

(1)​修改端口号。 8080不能作为公网的端口访问。

(2)​修改线程数量。

(3)​分析下线程的函数实现原理。

(4)​使用花生壳软件实现公网监控

2.​学习摄像头的使用

摄像头实现拍照源程序流程:(50%程序学过的)

1.​打开摄像头的设备文件 open(“/dev/xxx”);

2.​获取摄像头参数。判断摄像头是否支持一些特有的操作。read

3.​配置摄像头的参数。(1) 输出的源数据格式RGB888 (2) 输出的图像尺寸

RGB888:数字数据格式

其他格式: YUV 模拟数据格式

4.​判断摄像头的参数是否设置成功。

5.​读取摄像头的数据。 队列的形式。

6.​将读取的YUV格式数据转为RGB格式

7.​将RGB格式数据编码为BMP格式的图片存放到电脑上

​扩展练习:制作贪吃蛇游戏。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9444

    浏览量

    156143
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217973
  • 网络
    +关注

    关注

    14

    文章

    8130

    浏览量

    93089
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    连载|开发工具,易安卓让系统功能调用像写应用逻辑一样简单

    通过自研系统封装库,易安卓将复杂的系统控制能力以接口形式开放给开发者,让系统功能调用像写应用逻辑一样简单。
    的头像 发表于 11-27 11:40 87次阅读
    连载|<b class='flag-5'>开发</b>工具,易安卓让系统功能<b class='flag-5'>调用</b>像写应用逻辑一样简单

    【免费送书】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、开发调试难度大所致。2021年,一本讲解驱动开发的专著问世即获市场青睐,畅销近万册——这便
    的头像 发表于 11-18 08:06 433次阅读
    【免费送书】成为硬核<b class='flag-5'>Linux</b><b class='flag-5'>开发</b>者:《<b class='flag-5'>Linux</b> 设备驱动<b class='flag-5'>开发</b>(第 2 版)》

    API接口调用中的网络异常及解决方案

    一、连接类异常:“无法建立通信链路” 连接类异常的核心问题是 客户端与API服务器之间无法成功建立TCP连接 ,导致调用请求“发不出去”,是网络层最基础的异常类型。 1. 常见场景与原因 目标服务器
    的头像 发表于 11-17 09:22 317次阅读

    调用拼多多开放平台 API 获取店铺列表

    ​  在电商平台生态开发中,获取店铺信息是常见的需求。本文将介绍如何通过拼多多开放平台的 API 接口获取店铺列表,包括接口概述、调用流程以及注意事项。 1.
    的头像 发表于 11-10 15:30 197次阅读
    <b class='flag-5'>调用</b>拼多多开放平台 API 获取店铺列表

    深入了解系统调用API:探索操作系统底层的关键接口

    ,也无法使用内核函数。当用户进程必须访问内核或使用某个内核函数时,就得使用系统调用(System Call)。在Linux中,系统调用是用户空间访问内核空间的唯一途径。 什么是系统调用
    的头像 发表于 11-03 09:20 437次阅读

    VVIC 平台商品详情接口高效调用方案:从签名验证到数据解析全流程

    本文详解VVIC平台商品详情接口调用全流程,涵盖参数配置、签名生成、异常处理与数据解析,提供可复用的Python代码及避坑指南,助力开发者高效实现安全、稳定的数据对接。
    的头像 发表于 09-23 10:28 388次阅读

    Linux 应用开发手册

    T507linux应用开发手册
    发表于 08-22 17:01 10次下载

    【HZ-T536开发板免费体验】3 - Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?

    的大小是47M字节,还是比较小的,当然有进一步裁减的余地。 安装curl Cangjie Magic默认是调用curl来执行大模型推理工作的,而开发板默认是没有
    发表于 08-01 22:15

    如何调用C的接口来封装micropyton接口?

    microPython的库比较少,无法满足需求,请问调用C的接口来封装micropyton接口如何操作?能否提供详细步骤? 你好,可以参考micropython官方的教程来添加自定义的模块。
    发表于 06-23 07:17

    Linux网络设置与基础服务

    Linux网络设置与基础服务
    的头像 发表于 04-09 11:51 3139次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>设置与基础服务

    如何在RakSmart服务器上用Linux系统部署DeepSeek

    ://ollama.com/install.sh | sh`,并配置服务监听所有网络接口(修改 `/etc/systemd/system/ollama.service` 添加 `OLLAMA_HOST=0.0.0.0`)。 2. 下载模型:通过 `ollama run d
    的头像 发表于 03-14 11:53 624次阅读

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux设备驱动的分类

    Drivers):这类驱动程序用于支持网络接口卡(NIC)和其他网络设备。它们负责管理数据包的传输、网络连接和协议处理等功能。Linux
    发表于 03-12 10:20

    飞凌嵌入式ElfBoard ELF 1板卡-Linux设备驱动的分类

    Drivers):这类驱动程序用于支持网络接口卡(NIC)和其他网络设备。它们负责管理数据包的传输、网络连接和协议处理等功能。Linux
    发表于 03-10 17:00

    curl wget bond:深入解析命令行工具的差异与应用场景

    测试端口: curl -v ip:端口 限制下载速度: curl --limit-rate 100K http://example.com wget wget 是一个用于从网络下载文件的命令行工具
    的头像 发表于 01-24 09:20 773次阅读

    如何使用 cURL 测试 HTTP 协议

    。以下是如何使用cURL测试HTTP协议的详细步骤和示例。 1. 安装cURL 在大多数Linux发行版和MacOS中,cURL已经预装。如果你使用的是Windows,可以从
    的头像 发表于 12-30 09:26 2095次阅读