petalinux_zynq7 驱动DAC以及ADC模块之四:python实现http_api

前文:

petalinux_zynq7 C语言驱动DAC以及ADC模块之一:建立IPicon-default.png?t=N7T8https://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二:petalinuxicon-default.png?t=N7T8https://blog.csdn.net/qq_27158179/article/details/136236138petalinux_zynq7 C语言驱动DAC以及ADC模块之三:实现C语言API并编译出库被python调用icon-default.png?t=N7T8https://blog.csdn.net/qq_27158179/article/details/136238093本文用python + flask 在zynq中给出http api。用postman测试。

1. adda_api.py

from flask import Flask, jsonify, request
from adda_service import adda_service# Flask初始化参数尽量使用你的包名,这个初始化方式是官方推荐的,官方解释:http://flask.pocoo.org/docs/0.12/api/#flask.Flask
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False  # 禁止中文转义@app.route("/adda/dac", methods=["POST"])
def adda_dac():httpInstance = adda_service()ret = httpInstance.adda_dac()return ret@app.route("/adda/adc", methods=["POST"])
def adda_adc():httpInstance = adda_service()ret = httpInstance.adda_adc()return ret@app.route('/HelloWorld')
def hello_world():return "Hello World!"if __name__ == "__main__":app.run(host="0.0.0.0")

2. adda_lib.py

import ctypes
import timell = ctypes.cdll.LoadLibrary
libadda = ll("./libadda.so")class adda_lib():def __init__(self):pass# 输出十六进制类型数组def print_hex(self, bytes):l = [hex(int(i)) for i in bytes]print(" ".join(l))# 字节列表以16进制格式打印数据def bytes_to_hexstring(self, data):lin = ['%02X' % i for i in data]	# [ ]内是列表解析语法 ,'%02X'%是格式化语法。hex_str = " ".join(lin)return hex_str# initdef adda_open(self):libadda.adda_open.restype = ctypes.c_intret = libadda.adda_open()# closedef adda_close(self):libadda.adda_close.restype = ctypes.c_intret = libadda.adda_close()# dac 采样频率def adda_DacSetSampleFrequency(self, value):libadda.adda_DacSetSampleFrequency.argtype = ctypes.c_intlibadda.adda_DacSetSampleFrequency.restype = ctypes.c_intsample_frequency = ctypes.c_uint(value)ret = libadda.adda_DacSetSampleFrequency(sample_frequency)# dac 数组 - 正弦波def adda_DacGenDataSin(self, desire_length):# uint8_t dac_buf[1024]libadda.adda_DacGenDataSin.argtype = [ctypes.POINTER(ctypes.c_ubyte*1024), ctypes.c_int]libadda.adda_DacGenDataSin.restype = ctypes.c_intdac_buf = ctypes.create_string_buffer(desire_length)dac_length = ctypes.c_uint(desire_length)ret = libadda.adda_DacGenDataSin(dac_buf, dac_length)ba_raw = bytearray(dac_buf.raw)ba_out = bytearray(dac_length.value)for i in range(dac_length.value):ba_out[i] = ba_raw[i]# print("ba_out", ba_out)b_out = bytes(ba_out)return b_out# dac 数组 - 三角波def adda_DacGenDataTriangle(self, desire_length):# uint8_t dac_buf[1024]libadda.adda_DacGenDataTriangle.argtype = [ctypes.POINTER(ctypes.c_ubyte*1024), ctypes.c_int]libadda.adda_DacGenDataTriangle.restype = ctypes.c_intdac_buf = ctypes.create_string_buffer(desire_length)dac_length = ctypes.c_uint(desire_length)ret = libadda.adda_DacGenDataTriangle(dac_buf, dac_length)ba_raw = bytearray(dac_buf.raw)ba_out = bytearray(dac_length.value)for i in range(dac_length.value):ba_out[i] = ba_raw[i]# print("ba_out", ba_out)b_out = bytes(ba_out)return b_out# dac 数组 - 设置def adda_DacSetData(self, data_bytes):libadda.adda_DacSetData.argtype = [ctypes.POINTER(ctypes.c_ubyte*1024), ctypes.c_int]libadda.adda_DacSetData.restype = ctypes.c_intdac_buf = ctypes.create_string_buffer(data_bytes)dac_length = ctypes.c_uint(len(data_bytes))ret = libadda.adda_DacSetData(dac_buf, dac_length)# dac 设置输出def adda_DacSetOutput(self, enable):libadda.adda_DacSetOutput.argtype = ctypes.c_intlibadda.adda_DacSetOutput.restype = ctypes.c_intvalue = ctypes.c_int(enable)ret = libadda.adda_DacSetOutput(value)# dac demo 1def demo_dac_sin(self):#libadda.demo_dac_sin()# initself.adda_open()self.adda_DacSetSampleFrequency(128000)# dac 数组 - 正弦波dac_length = 128dac_buf = self.adda_DacGenDataSin(dac_length)print("dac_buf: ", self.bytes_to_hexstring(dac_buf))self.adda_DacSetData(dac_buf)# dac输出开启self.adda_DacSetOutput(1)# closeself.adda_close()# dac demo 2def demo_dac_triangle(self):# libadda.demo_dac_triangle()# initself.adda_open()self.adda_DacSetSampleFrequency(128000)# dac 数组 - 三角波dac_length = 128dac_buf = self.adda_DacGenDataTriangle(dac_length)print("dac_buf: ", self.bytes_to_hexstring(dac_buf))self.adda_DacSetData(dac_buf)# dac输出开启self.adda_DacSetOutput(1)# closeself.adda_close()# adc 采样频率def adda_AdcSetSampleFrequency(self, value):libadda.adda_AdcSetSampleFrequency.argtype = ctypes.c_intlibadda.adda_AdcSetSampleFrequency.restype = ctypes.c_intsample_frequency = ctypes.c_uint(value)ret = libadda.adda_AdcSetSampleFrequency(sample_frequency)# adc 获取采样数据def adda_AdcSampleData(self, desire_length):libadda.adda_AdcSampleData.argtype = [ctypes.POINTER(ctypes.c_ubyte*1024), ctypes.c_int]libadda.adda_AdcSampleData.restype = ctypes.c_intadc_buf = ctypes.create_string_buffer(desire_length)adc_length = ctypes.c_uint(desire_length)ret = libadda.adda_AdcSampleData(adc_buf, adc_length)ba_raw = bytearray(adc_buf.raw)ba_out = bytearray(adc_length.value)for i in range(adc_length.value):ba_out[i] = ba_raw[i]# print("ba_out", ba_out)b_out = bytes(ba_out)return b_out# adc demodef demo_adc(self):# initself.adda_open()# 设置采样频率self.adda_AdcSetSampleFrequency(100000)# 开始采样adc_length = 300adc_buff = self.adda_AdcSampleData(adc_length)# closeself.adda_close()# 打印结果print("adc_buff: ", self.bytes_to_hexstring(adc_buff))

3. adda_service.py

from flask import Flask, jsonify, request
from adda_lib import adda_libclass adda_service():def __init__(self):passdef adda_dac(self):"""设置DAC:return:"""data = request.get_json()sampleFrequency = int(data.get("sampleFrequency"))hexString = data.get("hexString")enable = int(data.get("enable"))addaLibInst = adda_lib()# ret = addaLibInst.demo_dac_sin()# ret = addaLibInst.demo_dac_triangle()ret = addaLibInst.adda_open()ret = addaLibInst.adda_DacSetSampleFrequency(sampleFrequency)ret = addaLibInst.adda_DacSetData(bytes.fromhex(hexString))ret = addaLibInst.adda_DacSetOutput(enable)ret = addaLibInst.adda_close()return jsonify({"code": 0,"msg": "OK"})def adda_adc(self):"""ADC读取:return:"""data = request.get_json()sampleFrequency = int(data.get("sampleFrequency"))adc_length = int(data.get("adc_length"))addaLibInst = adda_lib()ret = addaLibInst.adda_open()ret = addaLibInst.adda_AdcSetSampleFrequency(sampleFrequency)adc_buff = addaLibInst.adda_AdcSampleData(adc_length)adc_result = addaLibInst.bytes_to_hexstring(adc_buff)# print("adc_result: ", adc_result)ret = addaLibInst.adda_close()return jsonify({"code": 0,"msg": "OK","hexString":adc_result})

4. 运行

4.1 拷贝文件

把adda_api.py,adda_lib.py,adda_service,libadda.so,拷贝到zynq的linux系统内。

4.2 准备网络

把zynq板卡和电脑连接同一个路由器。

4.3 zynq运行 adda_api.py

5. postman调试http接口

5.1 测试dac输出正弦波

http方法:post,http://192.168.123.138:5000/adda/dac
Body,raw:
{
    "sampleFrequency":"128000",
    "hexString":"7F858B92989EA4AAB0B6BBC1C6CBD0D5D9DDE2E5E9ECEFF2F5F7F9FBFCFDFEFEFFFEFEFDFCFBF9F7F5F2EFECE9E5E2DDD9D5D0CBC6C1BBB6B0AAA49E98928B857F79736C66605A544E48433D38332E2925211C1915120F0C09070503020100000000000102030507090C0F1215191C2125292E33383D43484E545A60666C7379",
    "enable":1
}

5.2 测试dac输出三角波


{
    "sampleFrequency":"128000",
    "hexString":"0001030507090B0D0F11131517191B1D1F21232527292B2D2F31333537393B3D3F41434547494B4D4F51535557595B5D5F61636567696B6D6F71737577797B7D7F81838587898B8D8F91939597999B9D9FA1A3A5A7A9ABADAFB1B3B5B7B9BBBDBFC1C3C5C7C9CBCDCFD1D3D5D7D9DBDDDFE1E3E5E7E9EBEDEFF1F3F5F7F9FBFD",
    "enable":1
}

5.3 测试adc


post,http://192.168.123.138:5000/adda/adc
Body,raw:
{
    "sampleFrequency":"100000",
    "adc_length":100
}

下篇:

petalinux_zynq7 C语言驱动DAC以及ADC模块之五:nodejs+vue3实现web网页波形显示icon-default.png?t=N7T8https://blog.csdn.net/qq_27158179/article/details/136240421

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/262980.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)

背景需求 上学期的周安排里,每班每周的自主游戏会轮到多个不同的内容 因此在每周的自主游戏观察有2次记录,观察的项目可以写不一样的, 如一位老师写沙水游戏,另一位写表演游戏 本学期,中班的自主游戏全部是户外的&am…

ApexRBp在线粒子传感器在电动汽车电池制造的应用

电动汽车电池的崛起与颗粒污染的挑战 随着电动汽车(EV)市场的迅速扩张,对高性能锂离子电池的需求也急剧增加。这些电池不仅是EV的心脏,更是推动其前行的核心动力。然而,在电池制造的每一个环节,都需要对多…

2024-02-21 作业

作业要求: 复习课上内容 //已完成结构体字节对齐,64位没做完的做完,32位重新都做一遍,课上指定2字节对齐的做一遍,自己验证 //已完成两种验证大小端对齐的代码写一遍复习指针内容 //已完成完善顺序表已写出的…

网络安全笔记总结

IAE引擎 1.深度检测技术--DFI和DPI技术 DFI和DPI都是流量解析技术,对业务的应用、行为及具体信息进行识别,主要应用于流量分析及流量检测。 DPI:深度包检测技术 DPI是一种基于应用层的流量检测和控制技术,对流量进行拆包&#x…

海外媒体发稿:链游媒体宣发推广7种有效策略解析-华媒舍

随着区块链技术的不断发展,链游(区块链游戏)已经成为了游戏市场中备受瞩目的一部分。仅仅开发出一款出色的链游并不足以成功,而有效的宣发推广策略则是不可或缺的。 本文将介绍7种有效的链游媒体宣发推广策略,帮助您了…

机器视觉【3】非线性求解相机几何参数

线性求解相机几何参数的缺点 上一章节介绍学习了(DLT)线性求解相机几何参数,了解到线性求解法当中比较明显的缺点: 没有考虑到镜头畸变的影响不能引入更多的约束条件融入到DLT算法当中优化最关键的是,代数距离并不是…

测试环境搭建整套大数据系统(六:搭建sqoop)

一:下载安装包 https://archive.apache.org/dist/sqoop/ 二:解压修改配置。 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt cd /opt mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7修改环境变量 vi /etc/profile#SQOOP_HOME export SQOOP_…

Python 在Word中创建表格并填入数据、图片

在Word中,表格是一个强大的工具,它可以帮助你更好地组织、呈现和分析信息。本文将介绍如何使用Python在Word中创建表格并填入数据、图片,以及设置表格样式等。 Python Word库: 要使用Python在Word中创建或操作表格,需…

Atcoder ABC340 A-D题解

比赛链接:ABC340 话不多说&#xff0c;看题。 Problem A: 签到。 #include <bits/stdc.h> using namespace std; int main(){int a,b,d;cin>>a>>b>>d;for(int ia;i<b;id)cout<<i<<endl;return 0; } Problem B: 还是签到题。一个v…

Neo4j导入数据之JAVA JDBC

目录结构 前言设置neo4j外部访问代码整理maven 依赖java 代码 参考链接 前言 公司需要获取neo4j数据库内容进行数据筛查&#xff0c;neo4j数据库咱也是头一次基础&#xff0c;辛辛苦苦安装好整理了安装neo4j的步骤&#xff0c;如今又遇到数据不知道怎么创建&#xff0c;关关难…

石头剪刀布游戏(C语言)

题目描述 石头剪刀布游戏有 3 种出拳形状&#xff1a;石头、剪刀、布。分别用字母 A , B , C 表示。 游戏规则: 出拳形状之间的胜负规则如下&#xff1a; A > B&#xff1b;B > C&#xff1b;C > A&#xff1b;">"左边一个字母&#xff0c;表示相对优…

STM32F4XX - CAN设置

can协议部分 - 逻辑信号和电平信号 先贴上CAN信号在物理信号线上的查分信号表示形式 显性电平&#xff1a; 电压差范围为1.5-2.5v。 对应的逻辑电平是0 隐性电平&#xff1a; 其他 对应的逻辑电平是1 为什么显性电平对应的逻辑电平值为0&#xff0c;而隐性电平对应的逻辑电平…

Spring基础之AOP和代理模式

文章目录 理解AOPAOP的实现原理 AOP代理模式静态代理动态代理1-JDK动态代理2-CGLIB动态代理 总结 理解AOP OOP - - Object Oriented Programming 面向对象编程 AOP - - Aspect Oriented Programming 面向切面编程 AOP是Spring提供的关键特性之一。AOP即面向切面编程&#xff0…

年关将至送大礼 社区适时献爱心

在这个快节奏的时代&#xff0c;社区作为人们生活的重要组成部分&#xff0c;其凝聚力和互助精神显得尤为重要。2024年2月7日&#xff0c;实践队员李若钰有幸参与了社区礼盒分装的活动&#xff0c;这不仅仅是一次简单的劳动&#xff0c;更是一次心灵的洗礼和感悟。 礼盒分装&am…

10.CSS3的calc函数

CSS3 的 calc 函数 经典真题 CSS 的计算属性知道吗&#xff1f; CSS3 中的 calc 函数 calc 是英文单词 calculate&#xff08;计算&#xff09;的缩写&#xff0c;是 CSS3 的一个新增的功能。 MDN 的解释为可以用在任何长度、数值、时间、角度、频率等处&#xff0c;语法如…

Git基本操作(2)

Git基本操作&#xff08;2&#xff09; 上交文件之后&#xff0c;git文件的变化git cat-file HEAD指针里面有啥文件被修改git statusgit diff 文件名 版本回退&#xff08;git reset&#xff09;撤销回退git reflog 撤销的三种情况还没有addgit checkout -- [file] 已经add还没…

week04day03(爬虫 beautifulsoup4、)

一. 使用bs4解析网页 下载bs4 - pip install beautifulsoup4 使用的时候 import bs4专门用于解析网页的第三方库 在使用bs4的时候往往会依赖另一个库lxml pip install lxml 网页代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><…

js谐音梗创意小游戏《望子成龙》

&#x1f33b; 前言 龙年到来&#xff0c;祥瑞满天。愿您如龙般矫健&#xff0c;事业腾飞&#xff1b;如龙鳞闪耀&#xff0c;生活美满。祝您龙年大吉&#xff0c;万事如意&#xff01; 龙年伊始&#xff0c;我给各位设计了一款原创的小游戏&#xff0c;话不多说&#xff0c;直…

vue3前端项目开发,具备纯天然的防止爬虫采集的特征

vue3前端项目开发,具备纯天然的防止爬虫采集的特征&#xff01;众所周知&#xff0c;网络爬虫可以在网上爬取到一些数据&#xff0c;很多公司&#xff0c;为了自己公司的数据安全&#xff0c; 尤其是web端项目&#xff0c;不希望被爬虫采集。那么&#xff0c;您可以使用vue技术…

redis GEO 类型原理及命令详解

目录 前言 一、GeoHash 的编码方法 二、Redis 操作GEO类型 前言 我们有一个需求是用户搜索附近的店铺&#xff0c;就是所谓的位置信息服务&#xff08;Location-Based Service&#xff0c;LBS&#xff09;的应用。这样的相关服务我们每天都在接触&#xff0c;用滴滴打车&am…