色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【御芯微WIoTa?自組網(wǎng)協(xié)議開發(fā)套件試用體驗(yàn)】學(xué)習(xí)AT組件

開發(fā)板試用精選 ? 來源:開發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-11-25 15:13 ? 次閱讀

本文來源電子發(fā)燒友社區(qū),作者:華仔stm32, 帖子地址:https://bbs.elecfans.com/jishu_2293777_1_1.html

官方提供的是AT命令格式,但是我原來想象的還是用模塊本身獲取數(shù)據(jù)然后上傳給AP,這次仔細(xì)閱讀了官方的源代碼,at代碼在PS目錄下面,的at目錄下面,主要有at_boot.cat_factory.cat_wiota.cat_wiota.hat_wiota_atuto_manager.cati_prs.h文件。

at_factory.c下面給出了示例,可以學(xué)習(xí)如何操作:

#ifdef UC8288_MODULE
#ifdef UC8288_FACTORY
#ifdef *RT_THREAD*
#include 
#include 
#endif
#include 
#include "uc_adda.h"
#include "string.h"
#include "ati_prs.h"
#include "at.h"
#ifdef *L1_FACTORY_FUNC*
#include "uc_wiota_api.h"
#endif

enum factory_can_write_read_type

{

FACTORY_CAN_WRITE = 0,

FACTORY_CAN_READ,

};

enum factory_command_type

{

FACTORY_WIOTA = 0,

FACTORY_GPIO, // 1

FACTORY_I2C,// 2

FACTORY_AD,// 3

FACTORY_DA,// 4

FACTORY_UART1,//5

FACTORY_PWM, // 6

FACTORY_CAN,

};

#define DAC_DEV_NAME                      "dac"

#define ADC_DEV_NAME                      "adc"

#define AHT10_I2C_BUS_NAME          "hw_i2c"

#define UART1_DEV_NMAE                  "uart1"

#define PWM_DEV_NAME                     "pwm0"

#define CAN_DEV_NAME                       "can1"

#define AT24C02_ADDR                         0xA0

static rt_err_t write_reg(struct rt_i2c_bus_device *bus, rt_uint8_t reg, rt_uint8_t *data)

{

rt_uint8_t buf[8];

struct rt_i2c_msg msgs;

rt_uint32_t buf_size = 1;


buf[0] = reg; //cmd
if (data != RT_NULL)
{
    buf[1] = data[0];
    buf[2] = data[1];
    buf[3] = data[2];
    buf[4] = data[3];
    buf_size = 5;
}

msgs.addr = AT24C02_ADDR;
msgs.flags = RT_I2C_WR;
msgs.buf = buf;
msgs.len = buf_size;

if (rt_i2c_transfer(bus, &msgs, 1) == 1)
{
    return RT_EOK;
}
else
{
    return -RT_ERROR;
}


}

static rt_err_t read_regs(struct rt_i2c_bus_device *bus, rt_uint8_t len, rt_uint8_t *buf)

{

struct rt_i2c_msg msgs;


msgs.addr = AT24C02_ADDR;
msgs.flags = RT_I2C_RD;
msgs.buf = buf;
msgs.len = len;

if (rt_i2c_transfer(bus, &msgs, 1) == 1)
{
    return RT_EOK;
}
else
{
    return -RT_ERROR;
}


}

static int at_test_i2c(void)

{

rt_device_t dev;

unsigned char set_data[4] = {1,2,3,4};

unsigned char get_data[4] = {0};

int num = 0;


dev = rt_device_find(AHT10_I2C_BUS_NAME);
if(RT_NULL == dev)
{
    rt_kprintf("rt_device_find i2c fail
");
    return 1;
}

if(RT_EOK != write_reg((struct rt_i2c_bus_device*)dev, 0, set_data))
{
    rt_kprintf("write_reg i2c fail
");
    return 2;
}

if(RT_EOK != read_regs((struct rt_i2c_bus_device*)dev, 4, get_data))
{
    rt_kprintf("read_regs i2c fail
");
    return 3;
}

for(num = 0; num < 4; num++)
{
    if (set_data[num] != get_data[num])
    {
        rt_kprintf("i2c data match fail. num=%d, %d!= %d
", num, set_data[num], get_data[num]);
        return 4;
    }
}
    
return 0;

}

static int at_test_ad(unsigned int channel)

{

rt_adc_device_t adc_dev;

rt_uint32_t value;


adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
if (RT_NULL == adc_dev)
{
    rt_kprintf("ad find %s  fail
", ADC_DEV_NAME);
    return -1;
}

rt_adc_enable(adc_dev, channel);

value = rt_adc_read(adc_dev, channel);

rt_adc_disable(adc_dev, channel);

return value;


}

static int at_test_da(unsigned int channel, unsigned int value)

{

rt_dac_device_t dac_dev;


dac_dev = (rt_dac_device_t)rt_device_find(DAC_DEV_NAME);
if (RT_NULL == dac_dev)
{
    rt_kprintf("da find fail
");
    return -1;
}

rt_dac_enable(dac_dev, channel);

rt_dac_write(dac_dev, channel, value);

//rt_dac_disable(dac_dev, channel);

return 0;


}

static int at_factory_test_uart1(void)

{

static rt_device_t serial;

unsigned char send_data[4] = {"1234"};

unsigned char recv_data[4] = {0};


serial = rt_device_find(UART1_DEV_NMAE);
if (serial)
    return 1;

if ( RT_EOK != rt_device_open(serial, RT_DEVICE_OFLAG_RDWR))
{
    rt_kprintf("uart open fail
");
    return 2;
}

rt_device_write(serial, 0, send_data, sizeof(send_data)/sizeof(unsigned char));

if(rt_device_read(serial, 0, recv_data, sizeof(recv_data)/sizeof(unsigned char)) < 1)
{
    rt_kprintf("uart read fail
");
    return 3;
}

rt_device_close(serial);

return strcmp((const char *)send_data, (const char *)recv_data);


}

static int at_factory_test_pwm(int channel, unsigned int period)

{

struct rt_device_pwm *pwm_dev;

pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (RT_NULL == pwm_dev)
{
    return 1;
}

rt_pwm_set(pwm_dev, channel, period, 0);
rt_pwm_enable(pwm_dev, channel);
rt_pwm_disable(pwm_dev,channel);

return 0;

}

static int at_factory_test_can(int type, void *data)

{

static rt_device_t can_dev;

struct rt_can_msg msg = {0};

//struct rt_can_msg rxmsg = {0};

rt_err_t res;

rt_size_t  size;

can_dev = rt_device_find(CAN_DEV_NAME);
if (RT_NULL == can_dev)
{
    rt_kprintf("find %s failed!
", CAN_DEV_NAME);
    return 1;
}
res = rt_device_open(can_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX);
if(res != RT_EOK)
{
     rt_kprintf("open %s failed!
", CAN_DEV_NAME);
    return 2;
}

if (type == FACTORY_CAN_WRITE)
{
    msg.id = 0x78;            
    msg.ide = RT_CAN_STDID;    
    msg.rtr = RT_CAN_DTR;     
    msg.len = 8;             

    msg.data[0] = 0x00;
    msg.data[1] = 0x11;
    msg.data[2] = 0x22;
    msg.data[3] = 0x33;
    msg.data[4] = 0x44;
    msg.data[5] = 0x55;
    msg.data[6] = 0x66;
    msg.data[7] = 0x77;

    size = rt_device_write(can_dev, 0, &msg, sizeof(msg.data));
    if (size == 0)
    {
        return 2;
    }
 }
else if (type == FACTORY_CAN_READ)
{
    int len = 0;
    //rxmsg.hdr = -1;
    rt_device_read(can_dev, 0, data, 8);
    rt_kprintf("recv data:");
    for(len = 0; len < 8; len++)
    {
        rt_kprintf("%x", *((int*)(data+len)));
    }
    rt_kprintf("
");
}

return 0;

}

static at_result_t at_factory_setup(const char* args)

{

int type = 0, data = 0, data1 = 0;

args = parse ((char*)(++args),"ddd", &type, &data, &data1);
 if (!args)
 {
     return AT_RESULT_PARSE_FAILE;
 }

rt_kprintf("type = %d,data=%d,data1 = %d
",  type, data, data1);
switch(type)
{
    case FACTORY_WIOTA:
    {

#ifdef *L1_FACTORY_FUNC*

if(!factory_msg_handler(data,data1)) {

return AT_RESULT_FAILE;

}

#endif

break;

}

case FACTORY_GPIO:

{

rt_base_t pin = data;

rt_base_t value = data1 & 0x1;

rt_pin_write( pin, value);            
        break;
    }
    case FACTORY_I2C:
    {
        if (at_test_i2c())
            return AT_RESULT_FAILE;
        break;
    }
    case FACTORY_AD:
    {
        unsigned int ch = data;
        int result = at_test_ad(ch);            
        if (result < 0)
              return AT_RESULT_NULL;  

        switch(ch)
        {
            case ADC_CONFIG_CHANNEL_TEMP_B:
            {
                float val = 0.00;
                val = (float)((float)1.42/4.0 + (result - 2048)* (float)1.42/2048.0/8.0);
                at_server_printfln("+FACTORY=%d,0.%d", type, val*100.0);
                break;
            }
            default:
            {
                at_server_printfln("+FACTORY=%d,%d", type, result);
                break;
             }
        }
        
        break;
    }
    case FACTORY_DA:
    {
        unsigned int ch = data;
        unsigned int val = data1;
        if(at_test_da(ch, val) < 0)
            return AT_RESULT_NULL;
        break;
    }
    case FACTORY_UART1:
    {
        if(at_factory_test_uart1())
             return AT_RESULT_NULL;
        break;
    }
    case FACTORY_PWM:
    {
        int channel = data;
        unsigned int period = data1;
        
        if (at_factory_test_pwm( channel, period))
            return AT_RESULT_NULL;
        break;
     }
    case FACTORY_CAN:
    {
        char recv[8] = {0};
        if (at_factory_test_can(data, recv))
            return AT_RESULT_NULL;
        
        if (data == FACTORY_CAN_READ)
        {
            at_server_printf("+FACTORY=%d,", type);
            at_send_data(recv, sizeof(recv)/sizeof(recv[0]));
        }
        
        break;
    }
    default:
        return AT_RESULT_REPETITIVE_FAILE;
}

return AT_RESULT_OK;

}

AT_CMD_EXPORT("AT+FACTORY", "=,,", RT_NULL, RT_NULL, at_factory_setup, RT_NULL);

#endif

#endif
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 御芯微
    +關(guān)注

    關(guān)注

    4

    文章

    57

    瀏覽量

    3324
收藏 人收藏

    評論

    相關(guān)推薦

    【正點(diǎn)原子STM32H7R3開發(fā)套件試用體驗(yàn)】開發(fā)套件開箱報(bào)告

    STM32從入門到跑路了。 而且官方提供的資料和例程,那也是特別的豐富: 正點(diǎn)原子STM32H7R3開發(fā)套件確實(shí)是一套非常值得擁有,非常值得學(xué)習(xí)研究的開發(fā)套件
    發(fā)表于 12-12 00:54

    追加名額丨米爾瑞RK3576開發(fā)板有獎試用

    米爾與瑞合作發(fā)布的新品基于瑞RK3576應(yīng)用處理器的MYD-LR3576開發(fā)板免費(fèi)試用
    的頭像 發(fā)表于 11-22 01:00 ?205次閱讀
    追加名額丨米爾瑞<b class='flag-5'>芯</b><b class='flag-5'>微</b>RK3576<b class='flag-5'>開發(fā)</b>板有獎<b class='flag-5'>試用</b>

    【xG24 Matter開發(fā)套件試用體驗(yàn)】深入了解Silicon Labs xG24 Matter開發(fā)套件

    今天把收到的xG24 Matter開發(fā)套件給大家做個詳細(xì)的介紹,Silicon Labs-科科技公司最新推出的一款具有智能和機(jī)器學(xué)習(xí)硬件加速功能的無線物聯(lián)網(wǎng)產(chǎn)品評估xG24 Matter開發(fā)
    發(fā)表于 08-27 20:23

    【xG24 Matter開發(fā)套件試用體驗(yàn)】1-基本情況介紹

    參加[Silicon Labs xG24 Matter開發(fā)套件免費(fèi)試用]活動,拿到了期待的EFR32xG24 Explorer 開發(fā)套件(一個基于 EFR32MG24 片上系統(tǒng)的小封裝開發(fā)
    發(fā)表于 07-17 12:39

    【xG24 Matter開發(fā)套件試用體驗(yàn)】初上手開發(fā)板和官方IDE

    本帖最后由 jf_56450220 于 2024-7-13 22:57 編輯 前言首先非常感謝電子發(fā)燒友論壇提供的xG24 Matter開發(fā)套件試用。根據(jù)datasheet了解到這塊開發(fā)板擁有
    發(fā)表于 07-13 22:20

    【xG24 Matter開發(fā)套件試用體驗(yàn)】初識xG24 Matter開發(fā)套件

    今天帶剛收到xG24 Matter開發(fā)套件的快遞,為大家做個xG24 Matter開發(fā)套件的視頻介紹,帶大家認(rèn)識一下這款xG24 Matter開發(fā)套件。 EFR32xG24 Explorer
    發(fā)表于 07-11 23:31

    【xG24 Matter開發(fā)套件試用體驗(yàn)】+開機(jī)啟動

    xG24 Matter開發(fā)套件試用體驗(yàn): 1.EFR32xG24 Explorer 套件是一個基于 EFR32MG24 片上系統(tǒng)的小封裝開發(fā)和評估平臺。EFR32xG24 Explor
    發(fā)表于 07-11 14:05

    如何使用wifi進(jìn)行自組網(wǎng)開發(fā)

    您好,我正在使用wifi進(jìn)行自組網(wǎng)開發(fā),但是demo中的都是借助于路由器進(jìn)行自組網(wǎng)的,我想知道能否有方案能夠只通過WIFI就完成自組網(wǎng)
    發(fā)表于 06-28 15:36

    能源大會暢談WIoTa技術(shù)應(yīng)用,IP核級自主物聯(lián)網(wǎng)芯片助力產(chǎn)業(yè)數(shù)字化轉(zhuǎn)型

    【南京】5月23號,在剛剛落下帷幕的第六屆綜合能源服務(wù)落地實(shí)踐峰會上,國內(nèi)領(lǐng)先的集成電路設(shè)計(jì)企業(yè)——重慶信息技術(shù)有限公司再度成為全場焦點(diǎn)。公司副總裁李明棟先生發(fā)表了一場主題為《低功耗能源物聯(lián)網(wǎng)通信
    的頭像 發(fā)表于 05-26 08:17 ?859次閱讀
    <b class='flag-5'>御</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>能源大會暢談<b class='flag-5'>WIoTa</b>技術(shù)應(yīng)用,IP核級自主物聯(lián)網(wǎng)芯片助力產(chǎn)業(yè)數(shù)字化轉(zhuǎn)型

    發(fā)力萬物智聯(lián),官宣7款WIoTa方案產(chǎn)品助力產(chǎn)業(yè)升級

    RFID讀寫器模組。模組采用郵票孔封裝,只有23mmx20mm小尺寸,UCM606L讀取距離達(dá)到5m以上。 據(jù)悉,重慶成立于2018年,是一家IP核級全自主創(chuàng)新的平臺型物聯(lián)網(wǎng)芯片設(shè)計(jì)企業(yè),這家企業(yè)自研底層射頻、DSP、編
    的頭像 發(fā)表于 05-10 00:15 ?3275次閱讀
    發(fā)力萬物智聯(lián),<b class='flag-5'>御</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>官宣7款<b class='flag-5'>WIoTa</b>方案產(chǎn)品助力產(chǎn)業(yè)升級

    攜合作伙伴發(fā)布新款RFID模組和7款WIoTa方案產(chǎn)品

    【深圳,福田】4月14日,在第二屆深圳國際傳感器與應(yīng)用技術(shù)展覽會期間,在深圳福田會展中心7號展館隆重舉行了其最新系列產(chǎn)品的發(fā)布會。此次發(fā)布會吸引了來自全國各地的行業(yè)專家、合作伙伴、媒體代表
    的頭像 發(fā)表于 04-16 08:17 ?424次閱讀
    <b class='flag-5'>御</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>攜合作伙伴發(fā)布新款RFID模組和7款<b class='flag-5'>WIoTa</b>方案產(chǎn)品

    攜合作伙伴發(fā)布新款RFID模組和7款WIoTa方案產(chǎn)品

    4月14日,在第二屆深圳國際傳感器與應(yīng)用技術(shù)展覽會期間,s首先一款中長距的UHF RFID模組,接連發(fā)布了基于WIoTa協(xié)議的7款大容
    發(fā)表于 04-15 20:19 ?442次閱讀
    <b class='flag-5'>御</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>攜合作伙伴發(fā)布新款RFID模組和7款<b class='flag-5'>WIoTa</b>方案產(chǎn)品

    邁來推出專為簡化汽車動態(tài)RGB-LED設(shè)計(jì)的開發(fā)套件ADK81116

    邁來推出應(yīng)用開發(fā)套件ADK81116。該套件專為簡化汽車動態(tài)RGB-LED應(yīng)用的開發(fā)流程而設(shè)計(jì)。這款全面而高效的解決方案配備了預(yù)加載的可配置固件,從而無需為此專門
    的頭像 發(fā)表于 04-01 14:08 ?856次閱讀
    邁來<b class='flag-5'>芯</b>推出專為簡化汽車動態(tài)RGB-LED設(shè)計(jì)的<b class='flag-5'>開發(fā)套件</b>ADK81116

    【LicheeRV-Nano開發(fā)套件試用體驗(yàn)】+智能平板開發(fā)

    首先感謝Sipeed矽速科技和電子發(fā)燒友給與的這次機(jī)會,得以試用LicheeRV-Nano開發(fā)套件,并與大家共同分享與學(xué)習(xí)。 鑒于試用報(bào)告格式調(diào)整,后面亦按要求展現(xiàn)。 申請理由:
    發(fā)表于 03-06 23:05

    【LicheeRV-Nano開發(fā)套件試用連載體驗(yàn)】+ 實(shí)現(xiàn)三麥克納姆輪小車自主導(dǎo)航

    LicheeRV-Nano開發(fā)套件的免費(fèi)試用新品體驗(yàn)。 此次試用也將按照新的規(guī)則發(fā)布報(bào)告進(jìn)行試用體驗(yàn)。 1、官方試用要求:
    發(fā)表于 03-03 14:20
    主站蜘蛛池模板: 亚洲国产成人爱AV在线播放丿| 欧美四虎精品二区免费| 92国产精品午夜免费福利视频| 性xxxx18公交车| 十九禁啊啪射视频在线观看| 欧洲电影巜肉欲丛林| 欧美videqsdesex0| 男人大臿蕉香蕉大视频| 伦理在线影院伦理电影| 久久久久久91香蕉国产| 婚后被调教当众高潮H喷水 | 国产中文字幕在线| 国产私拍福利精品视频| 国产亚洲精品黑人粗大精选| 国产精品色吧国产精品| 国产精品外围在线观看| 国产精亚洲视频综合区| 国产又粗又猛又爽又黄的免费视频| 国产品无码一区二区三区在线| 国产精品久久久久婷婷五月色婷婷| 国产精品久久久久久搜索 | 性欧美xxxxporn| 亚洲成a人片777777久久| 亚洲精品天堂在线观看| 亚洲综合AV色婷婷五月蜜臀| 伊人青青青| 70岁妇女牲交色牲片| a一级一片免费观看视频| 俺也去最新地址| 国产av在在免费线观看美女| 国产人在线成免费视频| 娇喘嗯嗯 轻点啊视频福利| 久久视热频这里只精品| 男人J进入女人P免费狂躁| 全黄H全肉禁乱公| 午夜一级免费视频| 亚洲一区二区三不卡高清| 97视频在线观看免费播放| 成人特级毛片| 国拍在线精品视频免费观看| 老头操美女|