• [问题求助] 【众智】【CANN】ArgMin算子tf官方API跑复数用例报错Aborted (core dumped)
    【功能模块】ArgMin【操作步骤&问题现象】1、tensorflow版本1.15.0、Python版本3.7.52、为了总结argmin算子对复数的处理算法,使用tf的api构造了复数用例,但运行报错Aborted (core dumped);但是相同shape的float32用例可以运行3、python测试代码如附件
  • [问题求助] 在Servlet服务器中无法调用api
    【功能模块】【操作步骤&问题现象】1、在main中执行getToken方法可以得到token2、在tomcat中运行放到Servlet类中出错【截图信息】在main中正常输出123456被正常输出,token没有【日志信息】(可选,上传日志内容或者附件)
  • [API使用] MindSpore-C++ API文档
    【功能模块】MindSpore C++API文档很多接口缺少描述【需求求助】致相关技术人员:      您好,在进行相关的MindSpore昇腾众智算子开发的过程中,我们遇到了很多C++ API接口的功能不够明确,请问MindSpore是否有比较详细的C++ API描述文档供我们查阅,降低我们的开发苦难。      祝好
  • [主题讨论] 教程能出一个分门别类的API归档吗
    现在的API文档就单纯的是按算子库来罗列的,没有很强的功能逻辑性,编程时需要某项功能时得每个类里面一个个找,很不方便,建议可以像知乎这个帖子这样,按功能来罗列讲解常用的算子pytorch | Tensor及其基本操作
  • [API集成编排] 入站rest接口如何调用平台API目录下面的接口
    入站rest接口如何调用平台API目录下面的接口
  • [算子开发] BuildCCE API 中out_of_bound_sync_check的含义
    【问题描述】BuildCCE 函数中 config中key=out_of_bound_sync_check表示什么?
  • [算子开发] 【众智】【CANN】DT_COMPLEX类型的相关API该如何查阅
    【操作步骤&问题现象】开发指南查阅链接:https://support.huaweicloud.com/aicpu_devg_community_beta/atlasaicpu_10_0035.html在实现算子对DT_COMPLEX类型的数据的相关操作时,找不到该类型数据的相关API,如:提取实部数据与虚部数据的方法。
  • [问题求助] 查询设备注册请求信息api接口文档描述是否有误
    【功能模块】设备BO资产说明--设备注册请求---查询设备注册请求信息【操作步骤&问题现象】1、返回参数说明有误【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] harmonyOS基于HiSpark Wifi loT开发套件(HI3861开发版)玩转指南
    玩转指南HiSpark Wifi loT 开发套件 炫彩灯板三色LED——PWM占空比控制颜色1.将炫彩灯板的三色灯依次按照红,绿,蓝的顺序闪烁三次2.使用PWM对炫彩灯版的三色灯进行控制2.1 什么是PWM2.2 代码光敏电阻的使用1.涉及到的主要API2.寻找光敏电阻对应的端口3.代码4.演示视频人体红外传感器的使用1.寻找人体红外传感器对应的端口2.代码3.演示视频HiSpark Wifi IoT 开发套件 OLED板OLED屏幕输出1.涉及到的主要API2.寻找OLED屏幕对应的端口3.代码4.演示视频harmonyOS虽然现在处于刚刚发布的阶段,发布会上的好多的宣传都是美好的,虽然现在还没完全发布出来,也有好多人也持有怀疑态度。不过正如好多人所说,如果这些美好的愿景,在中国有一个公司能做到的话,应该也只剩华为了。HiSpark Wifi loT 开发套件 炫彩灯板三色LED——PWM占空比控制颜色GPIO10:红GPIO11:绿GPIO12:蓝1.将炫彩灯板的三色灯依次按照红,绿,蓝的顺序闪烁三次代码:#include<stdio.h>#include<unistd.h>#include "ohos_init.h"#include "cmsis_os2.h"#include "wifiiot_gpio.h"#include "wifiiot_gpio_ex.h"#include "wifiiot_pwm.h"#include "wifiiot_adc.h"#include "wifiiot_errno.h"#define HUMAN_SENSOR_CHAN_NAME WIFI_IOT_ADC_CHANNEL_3#define RED_LED_PIN_NAME WIFI_IOT_IO_NAME_GPIO_10#define RED_LED_PIN_FUNCTION WIFI_IOT_IO_FUNC_GPIO_10_GPIO#define GREEN_LED_PIN_NAME WIFI_IOT_IO_NAME_GPIO_11#define GREEN_LED_PIN_FUNCTION WIFI_IOT_IO_FUNC_GPIO_11_GPIO#define BLUE_LED_PIN_NAME WIFI_IOT_IO_NAME_GPIO_12#define BLUE_LED_PIN_FUNCTION WIFI_IOT_IO_FUNC_GPIO_12_GPIO#define LED_DELAY_TIME_US 300000#define LED_BRIGHT WIFI_IOT_GPIO_VALUE1#define LED_DARK WIFI_IOT_GPIO_VALUE0#define NUM_BLINKS 2static void ColorfulLightTask(void *arg){    (void)arg;    static const WifiIotGpioIdx pins[] = {RED_LED_PIN_NAME,GREEN_LED_PIN_NAME,BLUE_LED_PIN_NAME};    for(int i = 0 ; i < NUM_BLINKS ; i++){        for(unsigned j = 0 ; j < sizeof(pins)/sizeof(pins[0]);j++){            GpioSetOutputVal(pins[j],LED_BRIGHT);            usleep(LED_DELAY_TIME_US);            GpioSetOutputVal(pins[j],LED_DARK);            usleep(LED_DARK);        }    }}static void ColorfulLightDemo(void){    osThreadAttr_t attr;    GpioInit();    IoSetFunc(RED_LED_PIN_NAME,RED_LED_PIN_FUNCTION);    IoSetFunc(GREEN_LED_PIN_NAME,GREEN_LED_PIN_FUNCTION);    IoSetFunc(BLUE_LED_PIN_NAME,BLUE_LED_PIN_FUNCTION);    GpioSetDir(RED_LED_PIN_NAME,WIFI_IOT_GPIO_DIR_OUT);    GpioSetDir(GREEN_LED_PIN_NAME,WIFI_IOT_GPIO_DIR_OUT);    GpioSetDir(BLUE_LED_PIN_NAME,WIFI_IOT_GPIO_DIR_OUT);    attr.name="ColorfulLightTask";    attr.attr_bits=0U;    attr.cb_mem=NULL;    attr.cb_size=0U;    attr.stack_mem=NULL;    attr.stack_size=4096;    attr.priority=osPriorityNormal;    if(osThreadNew(ColorfulLightTask,NULL,&attr) == NULL){        printf("[ColorfulLightDemo] Failed to create ColorfulLightTask!\n");    }}APP_FEATURE_INIT(ColorfulLightDemo);HI3861开发版炫彩灯板演示视频2.使用PWM对炫彩灯版的三色灯进行控制2.1 什么是PWM因为我之前无论是学习还是工作确实有没有涉及到太硬件的东西,所以确实连个PWM是个什么都不清楚。熟悉硬件的大佬,这部分直接跳过就OK了。PWM是Pulse Width Modulation的缩写,它的中文名字是脉冲宽度调制,利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术。好了,这就是它的概念了,再说一些专业解释,估计大家也不想听了。接下来我就按照自己的理解来说了。看上图,这是一个周期为10ms,即频率是100Hz的波形。上图共显示了三个周期,其中第1个周期高电平为4ms,第二个周期高电平为6ms,第三个周期高电平为8ms,可以看到3个周期中,高电平所占单个周期的比例越来越高。好了,这个比例越来越高有什么用呢?接下来就是重点了:首先明白一点我们人体的肉眼,每秒有超过固定张数的图片闪过时,我们是感觉不到顿挫感的,电影就是整个原理。同理,当小灯以超过100Hz的频率进行闪烁时,在我们人眼看来就是一直亮着的。所以当用高电平来控制小灯亮灭的时候,上一段所提到的高电平所占比例越高就会发生作用,随着它的比例越高就会灯就会越亮。不知道大家能不能明白,不明白的话就直接去度娘查吧,或者有高手也可以在留言里指导我一波如何解释这个东东。2.2 代码#define LED_DELAY_TIME_US 300000#define LED_BRIGHT WIFI_IOT_GPIO_VALUE1#define LED_DARK WIFI_IOT_GPIO_VALUE0#define NUM_BLINKS 2#define PWM_FREQ_DIVITION 64000static void ColorfulLightTask(void *arg){    (void)arg;    IoSetFunc(RED_LED_PIN_NAME,WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT);    IoSetFunc(GREEN_LED_PIN_NAME,WIFI_IOT_IO_FUNC_GPIO_11_PWM2_OUT);    IoSetFunc(BLUE_LED_PIN_NAME,WIFI_IOT_IO_FUNC_GPIO_12_PWM3_OUT);    PwmInit(WIFI_IOT_PWM_PORT_PWM1);    PwmInit(WIFI_IOT_PWM_PORT_PWM2);    PwmInit(WIFI_IOT_PWM_PORT_PWM3);   while(1){       for(int i = 1 ; i <= PWM_FREQ_DIVITION ; i *= 2){           PwmStart(WIFI_IOT_PWM_PORT_PWM1,i,PWM_FREQ_DIVITION);           usleep(250000);           PwmStop(WIFI_IOT_PWM_PORT_PWM1);       }        for(int i = 1 ; i <= PWM_FREQ_DIVITION ; i *= 2 ){           PwmStart(WIFI_IOT_PWM_PORT_PWM2,i,PWM_FREQ_DIVITION);            usleep(250000);            PwmStop(WIFI_IOT_PWM_PORT_PWM2);        }        for(int i = 1 ; i <= PWM_FREQ_DIVITION ; i *= 2){           PwmStart(WIFI_IOT_PWM_PORT_PWM3,i,PWM_FREQ_DIVITION);           usleep(250000);           PwmStop(WIFI_IOT_PWM_PORT_PWM3);       }   }}static void ColorfulLightDemo(void){    osThreadAttr_t attr;    GpioInit();    attr.name="ColorfulLightTask";    attr.attr_bits=0U;    attr.cb_mem=NULL;    attr.cb_size=0U;    attr.stack_mem=NULL;    attr.stack_size=4096;    attr.priority=osPriorityNormal;    if(osThreadNew(ColorfulLightTask,NULL,&attr) == NULL){        printf("[ColorfulLightDemo] Failed to create ColorfulLightTask!\n");    }}APP_FEATURE_INIT(ColorfulLightDemo);首先在编译过程中会报如图所示的错误:解决方法:解决: 修改vendor\hisi\hi3861\hi3861\build\config\usr_config.mk文件中的#CONFIG_PWM_SUPPORT is not set修改为CONFIG_PWM_SUPPORT=y烧写完成,演示视频:Hi3861OLED灯板演示光敏电阻的使用首先说一下目标:通过光敏电阻的使用来控制绿灯的亮度。也就是随着光照的增强,绿灯的亮度也增强。1.涉及到的主要APIAdcRead (WifiIotAdcChannelIndex channel, unsigned short *data, WifiIotAdcEquModelSel equModel, WifiIotAdcCurBais curBais, unsigned short rstCnt)这个API是核心函数,从字面意思是读取模拟信号准换成数字信号之后的数据的。第一个参数是WifiIotAdcChannelIndex,这个参数是用来指定从哪个通道来读取;第二个参数是unsigned short *,这个参数是用来存放读取到的数字。第三个参数是WifiIotAdcEquModelSel,这个参数是设置读取方式的吧,第四个参数是WifiIotAdcCurBais,这个参数字面意思是模拟能量控制方式,应该也是一个设置项;第五个参数是unsigned short,这个参数应该是设置一些复位键盘相关的操作,了解的大佬可以批评指出。2.寻找光敏电阻对应的端口从上面的AdcRead函数的第一个参数就可以看出,需要得到光敏电阻对应的通道口号。下面我们来一步一步分析怎么去找?(ps:没搞过硬件,各位大佬觉得有问题,欢迎批评指出)1.先找到光敏电阻的引脚从这个图上可以看出光敏电阻的引脚,也就是插到炫彩灯版的引脚是叫做PHO_RES2.再找到炫彩灯版上与光敏电镀引脚对应的引脚因为光敏电阻的引脚是PHO_RES,所以在炫彩灯版上对应的引脚是8,好的,最后再来看主板对应的引脚3.在主板上找炫彩灯版引脚8对应的引脚。炫彩灯版的引脚8对应的就是主板上从左上角第三个口,从中可以看到是ADC4,所以恭喜大家,这就找到了。这里所对应的就是AdcRead函数中的第一个参数WIFI_IOT_ADC_CHANNEL_43.代码#include<stdio.h>#include<unistd.h>#include "ohos_init.h"#include "cmsis_os2.h"#include "wifiiot_gpio.h"#include "wifiiot_gpio_ex.h"#include "wifiiot_pwm.h"#include "wifiiot_adc.h"#include "wifiiot_errno.h"#define HUMAN_SENSOR_CHAN_NAME WIFI_IOT_ADC_CHANNEL_3#define RED_LED_PIN_NAME WIFI_IOT_IO_NAME_GPIO_10#define RED_LED_PIN_FUNCTION WIFI_IOT_IO_FUNC_GPIO_10_GPIO#define GREEN_LED_PIN_NAME WIFI_IOT_IO_NAME_GPIO_11#define GREEN_LED_PIN_FUNCTION WIFI_IOT_IO_FUNC_GPIO_11_GPIO#define BLUE_LED_PIN_NAME WIFI_IOT_IO_NAME_GPIO_12#define BLUE_LED_PIN_FUNCTION WIFI_IOT_IO_FUNC_GPIO_12_GPIO#define LED_DELAY_TIME_US 300000#define LED_BRIGHT WIFI_IOT_GPIO_VALUE1#define LED_DARK WIFI_IOT_GPIO_VALUE0#define NUM_BLINKS 2#define PWM_FREQ_DIVITION 64000#define ADC_RESOLUTION 4996static void ColorfulLightTask(void *arg){    (void)arg;    IoSetFunc(RED_LED_PIN_NAME,WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT);    IoSetFunc(GREEN_LED_PIN_NAME,WIFI_IOT_IO_FUNC_GPIO_11_PWM2_OUT);    IoSetFunc(BLUE_LED_PIN_NAME,WIFI_IOT_IO_FUNC_GPIO_12_PWM3_OUT);    PwmInit(WIFI_IOT_PWM_PORT_PWM1);    PwmInit(WIFI_IOT_PWM_PORT_PWM2);    PwmInit(WIFI_IOT_PWM_PORT_PWM3);       while(1){       unsigned short data = 0;       unsigned short duty = 0;       if(AdcRead(WIFI_IOT_ADC_CHANNEL_4,&data,WIFI_IOT_ADC_EQU_MODEL_4,WIFI_IOT_ADC_CUR_BAIS_DEFAULT,0)==WIFI_IOT_SUCCESS)       {           printf("data:%d",data);           //128 1820           duty = PWM_FREQ_DIVITION * (1948-(unsigned int)data) / ADC_RESOLUTION;       }       PwmStart(WIFI_IOT_PWM_PORT_PWM2,duty,PWM_FREQ_DIVITION);       usleep(10000);       PwmStop(WIFI_IOT_PWM_PORT_PWM2);   }}static void ColorfulLightDemo(void){    osThreadAttr_t attr;    GpioInit();    attr.name="ColorfulLightTask";    attr.attr_bits=0U;    attr.cb_mem=NULL;    attr.cb_size=0U;    attr.stack_mem=NULL;    attr.stack_size=4096;    attr.priority=osPriorityNormal;    if(osThreadNew(ColorfulLightTask,NULL,&attr) == NULL){        printf("[ColorfulLightDemo] Failed to create ColorfulLightTask!\n");    }}APP_FEATURE_INIT(ColorfulLightDemo);4.演示视频Hi3861基于鸿蒙系统的使用光鲜传感器控制灯的亮度人体红外传感器的使用首先说一下,使用人体传感器要做的一个实现现象是:通过人体传感器控制红色led灯的亮度,距离现象是当人体传感器检测到有人靠近时候,红色的led灯亮度加强,当人离开的时候,红色的led灯的亮度减弱。由于人体红外传感器的使用和光敏电阻的使用都是涉及到了Adc信号的读取,并且所涉及的到的主要的API都是AdcRead(点击跳转至本文之前的解释),所以API相关可以直接去看光敏电阻使用部分的介绍1.寻找人体红外传感器对应的端口1.首先,从最开始来找人体红外传感器的引脚从上面这个图看以看出人体红外传感器的引脚是REL,也就是插到炫彩灯版上的引脚是REL2.然后再找炫彩灯版上与REL引脚对应的引脚从上图中可以看出,炫彩灯版REL对应的是从右边开始数的第二个引脚。3.然后再寻找与炫彩灯版右边开始数的第二个引脚在主板上所对应的引脚从上图中可以看出炫彩灯版右边开始数第二个引脚对应的为ADC3,因为就确定到了人体红外传感器所对应的端口。2.代码#include<stdio.h>#include<unistd.h>#include "ohos_init.h"#include "cmsis_os2.h"#include "wifiiot_gpio.h"#include "wifiiot_gpio_ex.h"#include "wifiiot_pwm.h"#include "wifiiot_adc.h"#include "wifiiot_errno.h"#define PWM_FREQ_DIVITION 64000#define ADC_RESOLUTION 4996static void ColorfulLightTask(void *arg){    (void)arg;    //由于炫彩灯板中红色led灯的GIPO为10,这里初始化控制GPIO10的控制方式为PWM模式    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10,WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT);    //调用函数初始化PWM模式    PwmInit(WIFI_IOT_PWM_PORT_PWM1);       while(1){       unsigned short data = 0;       unsigned short duty = 0;       //使用AdcRead函数对3通道进行ADC信号读取,读取到的结果存储在data中       if(AdcRead(WIFI_IOT_ADC_CHANNEL_3,&data,WIFI_IOT_ADC_EQU_MODEL_4,WIFI_IOT_ADC_CUR_BAIS_DEFAULT,0)==WIFI_IOT_SUCCESS)       {           printf("data:%d",data);           duty = PWM_FREQ_DIVITION *(unsigned int)data / ADC_RESOLUTION;           //128 1820            //duty = PWM_FREQ_DIVITION * (1948-(unsigned int)data) / ADC_RESOLUTION;       }       //PWM模式开启对红色led灯的控制       PwmStart(WIFI_IOT_PWM_PORT_PWM1,duty,PWM_FREQ_DIVITION);       usleep(10000);       //PWM模式关闭对红色led灯的控制       PwmStop(WIFI_IOT_PWM_PORT_PWM1);   }}static void ColorfulLightDemo(void){    osThreadAttr_t attr;    GpioInit();    attr.name="ColorfulLightTask";    attr.attr_bits=0U;    attr.cb_mem=NULL;    attr.cb_size=0U;    attr.stack_mem=NULL;    attr.stack_size=4096;    attr.priority=osPriorityNormal;    if(osThreadNew(ColorfulLightTask,NULL,&attr) == NULL){        printf("[ColorfulLightDemo] Failed to create ColorfulLightTask!\n");    }}APP_FEATURE_INIT(ColorfulLightDemo);3.演示视频通过实验现象发现,该人体传感器的只能读到两个数据,当人体靠近(大概7-8厘米就可以识别到)时候,data的值为1844左右,识别不到人体靠近的时候该值为126左右。人体红外传感器不是很灵敏Hi3861基于鸿蒙系统的使用人体红外传感器控制灯的亮度HiSpark Wifi IoT 开发套件 OLED板OLED屏幕输出首先来实现一个最低级别的目标:OLED屏幕上输出hello,world为了能够显示的清晰再加上一个计秒的数字。1.涉及到的主要API首先要搞清楚使用OLED板输出内容是使用的I2C协议unsigned int I2cInit (WifiIotI2cIdx id, unsigned int baudrate):用指定的波特率初始化I2C设备unsigned int I2cWrite (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData * i2cData ):往一个I2C设备中写数据第一个参数:指定要写入的I2C设备ID第二个参数:指定要写入的设置的地址,也就是往哪儿写第三个参数:指定要写入数据的描述指针,也就是写的内容2.寻找OLED屏幕对应的端口1.首先看OLED屏幕相关的引脚,因为我们所涉及的是I2C通信协议,所以我们只看I2C相关的引脚,目前我的wifiiot的oled只支持I2C,I2C的两个引脚为SCL,SDA,一个用来控制信号,一个用来控制数据。从下图可以看到OLED屏幕SCL和SDA的引脚分别为3和4.2.然后再确定OLED屏幕的SCL和SDA这两个引脚分别插到OLED板上的哪个引脚从下图可以看出是右边开始数的第三个和第四个3.最后再确定OLED板右边开始的第3,4个引脚会插入到主板上的哪两个引脚?从下图可以看出是主板依旧从右往左数的第3,4个引脚即为GPIO13和GPIO143.代码#include<stdio.h>#include<unistd.h>#include "ohos_init.h"#include "cmsis_os2.h"#include "wifiiot_gpio.h"#include "wifiiot_gpio_ex.h"#include "wifiiot_i2c.h"#include "wifiiot_errno.h"#define OLED_I2C_IDX WIFI_IOT_I2C_IDX_0#define OLED_I2C_ADDR 0x78 // 默认地址为 0x78#define OLED_I2C_CMD 0x00 // 0000 0000       写命令#define OLED_I2C_DATA 0x40 // 0100 0000(0x40) 写数据#define OLED_I2C_BAUDRATE (400*1000) // 400k#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])static unsigned char F6x8[][6] ={    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "    { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }, // horiz lines};/****************************************8*16的点阵************************************/static const unsigned char F8X16[]={    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0    0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1    0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2    0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3    0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4};enum Font {    FONT6x8 = 1,    FONT8x16};typedef enum Font Font;static uint32_t I2cWiteByte(uint8_t regAddr, uint8_t byte){    WifiIotI2cIdx id = OLED_I2C_IDX;    uint8_t buffer[] = {regAddr, byte};    WifiIotI2cData i2cData = {0};    i2cData.sendBuf = buffer;    i2cData.sendLen = sizeof(buffer)/sizeof(buffer[0]);    return I2cWrite(id, OLED_I2C_ADDR, &i2cData);}/** * @brief Write a command byte to OLED device. * * @param cmd the commnad byte to be writen. * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful; * returns an error code defined in {@link wifiiot_errno.h} otherwise. */static uint32_t WriteCmd(uint8_t cmd){    return I2cWiteByte(OLED_I2C_CMD, cmd);}/** * @brief Write a data byte to OLED device. * * @param cmd the data byte to be writen. * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful; * returns an error code defined in {@link wifiiot_errno.h} otherwise. */static uint32_t WriteData(uint8_t data){    return I2cWiteByte(OLED_I2C_DATA, data);}uint32_t OledInit(void){    //将GPIO13设置为i2c输出    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_13,WIFI_IOT_IO_FUNC_GPIO_13_I2C0_SDA);    //将GPIO14设置为i2c输出    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14,WIFI_IOT_IO_FUNC_GPIO_14_I2C0_SCL);    //使用指定波特率初始化I2C设备    I2cInit(WIFI_IOT_I2C_IDX_0,400*1000);    static const uint8_t initCmd[]={        0xAE,        0x00,        0x10,        0x40,        0xB0,        0x81,        0xFF,        0xA1,        0xA6,        0xA8,        0x3F,        0xC8,        0xD3,        0x00,        0xD5,        0x80,        0xD8,        0x05,        0xD9,        0xF1,        0xDA,        0x12,        0xDB,        0x30,        0x8D,        0x14,        0xAF,    };    for(size_t i = 0 ; i < sizeof(initCmd)/sizeof(initCmd[0]) ; i++){        WifiIotI2cData data = {0};        uint8_t buffer[] = {0x00,initCmd[i]};        data.sendBuf = buffer;        data.sendLen = sizeof(buffer)/sizeof(buffer[0]);        uint32_t status = I2cWrite(WIFI_IOT_I2C_IDX_0,0x78,&data);        if(status != WIFI_IOT_SUCCESS)            return status;    }    return WIFI_IOT_SUCCESS;}void OledFillScreen(uint8_t fillData){    uint8_t m = 0 ;    uint8_t n = 0;    for(m=0;m<8;m++){;        WifiIotI2cData data = {0};        uint8_t buffer[] = {0x00,0xb0+m};        data.sendBuf = buffer;        data.sendLen = sizeof(buffer)/sizeof(buffer[0]);        I2cWrite(WIFI_IOT_I2C_IDX_0,0x78,&data);        data.sendBuf[1] = 0x00;        I2cWrite(WIFI_IOT_I2C_IDX_0,0x78,&data);        data.sendBuf[1] = 0;        I2cWrite(WIFI_IOT_I2C_IDX_0,0x78,&data);        for(n = 0; n < 128;n++)        {            data.sendBuf[0] = 0x40;            data.sendBuf[1] = fillData;            I2cWrite(WIFI_IOT_I2C_IDX_0,0x78,&data);        }    }}void OledSetPosition(uint8_t x, uint8_t y){    WriteCmd(0xb0 + y);    WriteCmd(((x & 0xf0) >> 4) | 0x10);    WriteCmd(x & 0x0f);}void OledShowChar(uint8_t x, uint8_t y, uint8_t ch, Font font){              uint8_t c = 0;    uint8_t i = 0;    c = ch - ' '; //得到偏移后的值        if (x > 128 - 1) {        x = 0;        y = y + 2;    }    if (font == FONT8x16) {        OledSetPosition(x, y);            for (i = 0; i < 8; i++){            WriteData(F8X16[c*16 + i]);        }        OledSetPosition(x, y+1);        for (i = 0; i < 8; i++) {            WriteData(F8X16[c*16 + i + 8]);        }    } else {        OledSetPosition(x, y);        for (i = 0; i < 6; i++) {            WriteData(F6x8[c][i]);        }    }}void OledShowString(uint8_t x, uint8_t y, const char* str, Font font){    uint8_t j = 0;    if (str == NULL) {        printf("param is NULL,Please check!!!\r\n");        return;    }    while (str[j]) {        OledShowChar(x, y, str[j], font);        x += 8;        if (x > 120) {            x = 0;            y += 2;        }        j++;    }}static void OledTask(void *arg){    (void)arg;    //初始化GPIO设备    GpioInit();    //该函数定义了初始化OLED屏幕的一些操作    OledInit();     OledFillScreen(0x00);    int i = 0;    static char text[128] = {0};    while(1)    {        i++;        snprintf(text,sizeof(text),"hello,world--%d--",i);        // OledShowString(0, 0, "Hello, HarmonyOS", 1);        OledShowString(0,0,text,1);        sleep(1);    }}static void OledDemo(void){    //定义一个线程来跑实验任务    osThreadAttr_t attr;    attr.name = "OledTask";    attr.attr_bits = 0U;    attr.cb_mem = NULL;    attr.cb_size = 0U;    attr.stack_mem = NULL;    attr.stack_size = 4096;    attr.priority = osPriorityNormal;    //给定义的线程绑定了一个OledTask任务,OledTask函数中会放具体要跑的任务代码的逻辑    if(osThreadNew(OledTask,NULL,&attr) == NULL){        printf("[OLED Demo] Failed to create OledTask!\n");    }}APP_FEATURE_INIT(OledDemo);————————————————原文链接:https://blog.csdn.net/qq130106486/article/details/109624925
  • [问题求助] 【ROMA】【API测试】API测试缓慢且报服务超时
    【功能模块】ROMA->API测试【操作步骤&问题现象】1、医疗标准ABC环境ROMA,API测试,数据源连接正常,测试过程中,明显比较缓慢,开始有部分接口可以成功,部分接口返回连接服务器超时异常,最后使用接口都返回超时,见截图【截图信息】【日志信息】(可选,上传日志内容或者附件)e-mail:dubin@chinasofti.comtel:18182698675
  • [API使用] 有关API的问题
    【功能模块】mindspore有关初始化的API这个地方normal初始化应该是normal distribution吧 这里是不是写错了【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] API接口技术讲解
    API接口技术讲解1.什么是API接口API(APPLICATION PROGRAMME INTERFACE)字面意思理解就是应用程序接口,首先对于初学者来说,一定会想知道到底什么是API呢,其实API是和我们每个人的生活息息相关的,结合现实中的例子去理解会更容易,我们举一个简单易懂的事例,你去机场买票,你把地点时间告诉到航司工作人员,航司工作人员根据要求出票,这就是一场服务,输入的是飞机的地点,公司,时间等需求,输出的是一张张机票,这就是API,而你是输入者,航空公司人员是服务的提供者 。所有的乘客都是通过这种方式进行买票的。所以应用编程接口(API)由一组用于集成应用软件和服务的工具,协议和定义所结合而成。2.API的价值了解了API的各位,那这时候大家一定会想知道API到底应该怎么用?它对于社会的价值到底是什么? 我们可以继续用刚才的航空公司为例,假设该航空公司的某个合作伙伴开发了一个应用,可以帮助人们查找航司最低价的航班,这种体验的改进为航空公司带来了更多的客户,并拓展了现有的收入渠道。API可以方便用户以及使用者快速的获得他们的需求,并且提供了平台方便他们进行想法的交流和创作,同时可以管理用户,获得用户精准数据,从而创造收益,所以API对于我们的生活,商业,用户都有着重要的作用。                                1.1 API的价值3.华为数通开放API介绍初识了API的小伙伴们这时候应该想要实际操作一番,华为数通开发者社区为大家准备了API体验中心,供大家进行学习操作,以及教你如何使用它们,学习链接如下:https://devzone.huawei.com/apistudio/sample/apiList.html首先点开API体验中心然后点击基础网络或者下方的任何一个入口,在这里我们用基础网络做例子进入基础网络之后会出现云园区网络API使用目录还有教程,包括接口描述,调用实例,API手册等等,按照实验要求一步步操作就会帮助您调用基础网络,快速简单的处理繁琐的网络任务。云园区基础网络API体验操作步骤和目录:可以预约实验室,通过沙箱提供的工具进行API调用体验在申请了快速体验之后,您就会收到快速体验租户信息:之后会出现快速体验租户信息账户和密码以及北向账户,还有北向IP,按步骤操作之后会出现黑色界面的测试环境,其中的URL还有PASSWORD中会有用到账户和密码。TIP:1.实验过程中要仔细参考文章教程,部署测试环境,达到预期结果,如如遇异常可以及时把截图或者问题发表在这篇文章底下的评论留言区,这里小助手都会帮助您及时答复,也欢迎您对我们的产品提出您自己的建议,或者您可以加开发者交流微信群,与社区开发小助手随时交流你的想法。4.业务介绍在华为数通开发的API体验中心中,囊括了云园区网络,超融合数据中心网络 数通网络开发可编程等业务领域,比如基于imaster NCE-campus ,您可以快速简单的处理繁琐的网络任务,获得精准的客流数据,为您提供WIFI终端的位置数据用于位置解析,获取丰富的网络用户体验数据等等。Java和Python调用API开发指南为了让小伙伴更好的上手如何利用工具调用API,华为数通开发者为大家准备了,如下链接显示:http://devzone.huawei.com/cn/enterprise/campus/javaApi.html http://devzone.huawei.com/cn/enterprise/campus/pythonApi.html里面囊括了业务领域,应用场景,标签分类,让您足不出户就能在家进行线上API体验,华为数通开发者API体验中心给大家提供了13个应用场景,4大标签,3大业务领域。实现快速简单的处理繁琐的网络任务,获得精确的客流数据,通过WIFI访问互联网的场景,终端数据用于位置解析,获取网络用户体验数据等实现用户价值。如果有想要更多了解华为API的小伙伴,可以登录华为企业业务网站 e.huawei.com/cn/查询API相关文档,相信您会对华为数据开发API有更加深刻的印象。同样点击华为云developer.huaweicloud.com搜索API,里面也会有你想要的文章。5.总结API接口调用需要小伙伴们认真细心的去调试,这样才能获得期望的结果,同时也欢迎各位小伙伴在主贴下留言。在大家认真的调试中能够感受到华为开发者所创建的API接口的调用魅力,欢迎各位有想法的小伙伴来发表你们的见解,相信有一天你也会成为华为数通开发者的一员。 
  • [其他] 分享如何解决人脸识别构造请求类错误码
    人脸识别以开放API的方式提供给用户,用户通过实时访问和调用API获取人脸处理结果。调用API出错后,将不会返回结果数据。调用方可根据每个API对应的错误码来定位错误原因。今天给大家讲解调用人脸识别接口时,遇到构造请求类的错误码该如何解决?常见构造请求错误码状态码错误码说明处理措施403FRS.0002鉴权Token失败,用户Token错误或者已过期。请参考正确的认证鉴权方式,重新获取您的Token信息。400FRS.0010缺少请求头或者请求头为空。请参考构造请求,检查公共消息头是否配置。400FRS.0012请求参数格式不正确。请检查请求参数的输入格式是否正确。404APIG.0101API不存在。调用接口使用的请求地址或者url不存在或没有发布,请检测调用的接口的请求地址和url是否正确。如何进行正确的构造请求请求url的构成{url-scheme} :// {Endpoint} / {resource-path} ? {query-string}url参数说明url-scheme传输请求的协议,当前所有API均采用HTTPS协议。Endpoint承载REST服务端点的服务器域名或IP,不同服务在不同区域时,对应Endpoint不同。例如“获取Token”时,IAM在“华北-北京四”区域的Endpoint为“iam.cn-north-4.myhuaweicloud.com”。例如调用人脸检测接口时,“华北-北京四”区域的Endpoint为“face.cn-north-4.myhuaweicloud.com”。resource-path资源路径,即API访问路径。例如“获取Token”时,API的resource-path为“/v3/auth/tokens”。例如调用人脸检测V1接口时,API的resource-path为“/v1/{project_id}/face-detect”,“project_id”为项目ID,获取方法请参见获取项目ID/账号名/AK/SK。query-string查询参数,可选,查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“limit=10”,表示查询不超过10条数据。转自,【云小课】EI第11课 如何解决人脸识别构造请求类错误码?-云社区-华为云 (huaweicloud.com)
  • [其他] ModelArts使用Token访问在线服务的两种方式
    若在线服务的状态处于“运行中”,则表示在线服务已部署成功,部署成功的在线服务,将为用户提供一个可调用的API,此API为标准Restful API。在集成至生产环境之前,需要对此API进行调测,您可以使用以下两种方式向在线服务发起预测请求。 #### 方式一:使用图形界面的软件进行预测(以Postman为例) 1. 下载Postman软件并安装,您也可以直接在Chrome浏览器添加Postman扩展程序(也可使用其它支持发送post请求的软件)。Postman推荐使用7.24.0版本。 2. 打开Postman,如图所示。 **图1** Postman界面 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/30/014000hpvi9epkx1jat8al.png) 3. 在Postman界面填写参数,以图像分类举例说明。 - 选择POST任务,将在线服务的调用地址(通过在线服务详情界面-调用指南页签查看)复制到POST后面的方框。Headers页签的Key值填写为“X-Auth-Token”,Value值为您获取到的Token。 关于如何获取token,请参考[获取用户Token](https://support.huaweicloud.com/api-iam/iam_30_0001.html)。获取Token认证时,由于ModelArts生成的在线服务API不支持domain范围的token,因此需获取使用范围为project的Token信息,即scope参数的取值为project。 **图2** 参数填写 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/30/014013yy8iugyl2vdcel8u.png) 在Body页签,根据模型的输入参数不同,可分为2种类型:文件输入、文本输入。 **文件输入** 选择“form-data”。在“KEY”值填写模型的入参,比如本例中预测图片的参数为“images”。然后在“VALUE”值,选择文件,上传一张待预测图片(当前仅支持单张图片预测),如图3所示。 **图3** 填写Body ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/30/0141284f8sdrpn8kbav2z5.png) **文本输入** 选择“raw”,选择JSON(application/json)类型,在下方文本框中填写请求体,请求体样例如下: { "meta": { "uuid": "10eb0091-887f-4839-9929-cbc884f1e20e" }, "data": { "req\_data": \[ { "sepal\_length": 3, "sepal\_width": 1, "petal\_length": 2.2, "petal\_width": 4 } \] } } 其中,“meta”中可携带“uuid”,调用时传入一个,返回预测结果时回传此“uuid”用于跟踪请求,如无此需要可不填写meta**。**“data”包含了一个“req\_data”的数组,可传入单条或多条请求数据,其中每个数据的参数由模型决定,比如本例中的“sepal\_length”、“sepal\_width”等。 4. 参数填写完成,单击“send”发送请求,结果会在“Response”下的对话框里显示。 - 文件输入形式的预测结果样例如图4所示,返回结果的字段值根据不同模型可能有所不同。 - 文本输入形式的预测结果样例如图5所示,请求体包含“meta”及“data”。如输入请求中包含“uuid”,则输出结果中回传此“uuid”。如未输入,则为空。“data”包含了一个“resp\_data”的数组,返回单条或多条输入数据的预测结果,其中每个结果的参数由模型决定,比如本例中的“sepal\_length”、“predictresult”等。 **图4** 文件输入预测结果 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/30/014419rschy22qv97rmidh.png) **图5** 文本输入预测结果 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202106/30/0144296zncuaxlqytbrjwb.png) #### 方式二:使用curl命令发送预测请求 使用curl命令发送预测请求的命令格式也分为文件输入、文本输入两类。 1. 文件输入 curl -F '**images**\=@**图片路径**' -H '**X-Auth-Token**:**Token****值**' -X POST **在线服务地址** - “-F”是指上传数据的是文件,本例中参数名为“images”,这个名字可以根据具体情况变化,@后面是图片的存储路径。 - “-H”是post命令的headers,Headers的Key值为“X-Auth-Token”,这个名字为固定的, Token值是用户获取到的token值(关于如何获取token,请参考[获取请求认证](https://support.huaweicloud.com/api-modelarts/modelarts_03_0004.html))。 - “POST”后面跟随的是在线服务的调用地址。 curl命令文件输入样例: ``` curl -F 'images=@/home/data/test.png' -H 'X-Auth-Token:MIISkAY\*\*\*80T9wHQ==' -X POST https://modelarts-infers-1.cn-north-1.myhuaweicloud.com/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83 ``` 2. 文本输入 ``` curl -d '{"data":{"req\_data":\[{"sepal\_length":3,"sepal\_width":1,"petal\_length":2.2,"petal\_width":4}\]}}' -H 'X-Auth-Token:MIISkAY\*\*\*80T9wHQ==' -H 'Content-type: application/json' -X POST https://modelarts-infers-1.cn-north-1.myhuaweicloud.com/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83 ``` “-d”是Body体的文本内容。
  • [应用开发] 【ACL产品】ACL库java的相关API以及demo
    需要ACL相关的java开发资料和demo, 自然语言处理的相关工作就更好了