C#控制新大陆云平台(二)

本文介绍如何使用C#进行智能硬件控制,包括风扇、灯泡、舵机的操作及温度传感器数据读取。详细解析了API调用流程,如发送命令控制设备和批量查询设备最新数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文主要讲解风扇,灯泡,舵机的使用及温度的获取,一些比较麻烦的问题,如如何绘制折线图,数据库的连接等等,将会在下一次统一讲解。

使用C#封装了部分API 部分API接口




如何理解

在这里插入图片描述
基本组件:
label,TextBox,Button等,由于C#进行客户端开发,我们能够比较容易的做出对应的界面(拖控件),这里我就不讲解了.




控制风扇

先查看官方给的demo,在BLL下的MainBusiess.cs类中,找到对应的防御类(如果没有,也没关系,这个类只是对底层代码做了一个封装而已)找到onDefense()方法

public static void onDefense()//防御
{
    var qry = SDK.Cmds(10439, "defense", 1, TempInfo.Token);// Cmds(int deviceId, string apiTag, object data, string token = null)
}

我们能够发现调用了SDK类中的Cmds方法,其中SDK使我们自己声明的一个NLECloudAPI类实例,如下

static NLECloudAPI SDK = new NLECloudAPI(TempInfo.API_HOST);//获取地址信息(云接口主机地址)

那么我们查看NLECloudAPI中的Cmds方法

		/// <summary>
        /// 发送命令
        /// </summary>
        /// <param name="deviceId">设备ID</param>
        /// <param name="apiTag">传感标识名</param>
        /// <param name="data">
        /// 开关类:开=1,关=0,暂停=2 
        /// 家居类:调光灯亮度=0~254,RGB灯色度=2~239,窗帘、卷闸门、幕布打开百分比=3%~100%,红外指令=1(on)2(off)
        /// 其它:integer/float/Json/String类型值
        /// </param>
        /// <param name="token"></param>
        /// <returns></returns>
        public Result Cmds(Int32 deviceId, String apiTag, Object data, String token = null)
        {
            var result = new Result();

            var vry = PrimaryKeyVerify(deviceId , ref token);	//验证设备跟秘钥是否对应
            if (!vry.IsSuccess())
            {
                vry.CopyTo(result);
                return result;
            }

            //1、先定义该API接口路径,可以从http://api.nlecloud.com/页面的得知
            String apiPath = String.Format("{0}/{1}", mApiHost, NLECloudAPIUrl.CmdUrl);
            apiPath += string.Format("?{0}&{1}", "deviceId=" + deviceId, "apiTag=" + apiTag);
            //2、根据该API接口的请求参数中 得知需要创建个URI Parameters String类型参数,所以该参数直接跟在apiPath中
            //apiPath = apiPath.Replace("{deviceid}", deviceId.ToString());//将API地址中的{projectid}替换成真实项目ID

            //3、由于调用该API需要Token,所以我们定义了一个通用的对象HttpReqEntity,在AccessToken当成头部请求信息提交过去
            HttpReqEntity req = new HttpReqEntity();
            req.Method = HttpMethod.POST;
            req.Datas = JsonFormatter.Serialize(data);
            req.Headers.Add("AccessToken", token);

            //4、定义该API接口返回的对象
            result = RequestAPIHelper.RequestServer<HttpReqEntity>(apiPath, req);

            return result;

        }

发现,控制风扇非常简单,只要给出相应的设备Id,标识符,值和Token;控制灯泡的原理也一样,这里不做赘述。




获取温度

其实实际上就是获取相应的传感器数据,在SDK中找到相应的方法,如下

/// <summary>
        /// 批量查询设备最新数据 
        /// </summary>
        /// <param name="devids">设备ID用逗号隔开, 限制100个设备 </param>
        /// <param name="token"></param>
        /// <returns></returns>
        public ResultMsg<IEnumerable<DeviceSensorDataDTO>> GetDevicesDatas(String devids, String token = null)
        {
            var result = new ResultMsg<IEnumerable<DeviceSensorDataDTO>>();

            var vry = TokenVerify( ref token);
            if (!vry.IsSuccess())
            {
                vry.CopyTo(result);
                return result;
            }

            //1、先定义该API接口路径,可以从http://api.nlecloud.com/页面的得知
            String apiPath = String.Format("{0}/{1}", mApiHost, NLECloudAPIUrl.DevicesDatasUrl);

            //2、根据该API接口的请求参数中 得知需要创建个URI Parameters String类型参数,所以该参数直接跟在apiPath中
            //apiPath = apiPath.Replace("{projectId}", projectId.ToString());//将API地址中的{projectid}替换成真实项目ID
            apiPath += string.Format("?{0}", "devIds=" + devids);
            //3、由于调用该API需要Token,所以我们定义了一个通用的对象HttpReqEntity,在AccessToken当成头部请求信息提交过去
            HttpReqEntity req = new HttpReqEntity();
            req.Method = HttpMethod.GET;
            req.Headers.Add("AccessToken", token);

            //4、定义该API接口返回的对象
            result = RequestAPIHelper.RequestServer<HttpReqEntity, IEnumerable<DeviceSensorDataDTO>>(apiPath, req);

            if (result.IsSuccess() && result.ResultObj != null)
            {
                foreach (DeviceSensorDataDTO p in result.ResultObj)
                {
                    if (p.Datas != null)
                    {
                        foreach (SensorDataDTO w in p.Datas)
                        {
                            w.Value = ValueConvertToByteAry(w.Value);
                        }
                    }
                }
            }

            return result;
        }

我们可以看出,入口参数只有设备id跟Token,那么肯定获取的是所以传感器的数据,那么如何从这么多数据中获取到相应的数据呢?使用API模拟测试一下,是一个jsoin数据,我们只要解析到想要的数据即可.
在这里插入图片描述

qry1 = Data.SDK.GetDevicesDatas(Data.devIds, Data.Token);
lbl_NowTemperature.Content = qry1.ResultObj[0].Datas[5].Value.ToString();//获取温度
tem = int.Parse(qry1.ResultObj[0].Datas[11].Value.ToString());   //6 ctrl灯...11是风扇

将该操作与上述对应,那么我们就能够明白了。




控制舵机

由于舵机是要给一个角度,这里我们用拖动条(Slider)实现,当前也能通过文本输入的方式,布局如下:

在这里插入图片描述
操作的方法如下,发现其实也是跟控制风扇一样,传入相应的参数即可

//舵机控制用函数
public static void CtrlDir1(int a)
{
    var qry = SDK.Cmds(10439, "steeringengine1", a, TempInfo.Token);
}
public static void CtrlDir0(int b)
{
    var qry = SDK.Cmds(10439, "steeringengine0", b, TempInfo.Token);
}



小结

其实,控制这些基础硬件的,对于如何控制还是比较简单的,但一旦涉及到原理方面,就会变得非常难;下一篇博客,主要讲解如何使用定时器,连接数据库,以及如何绘制折线图;具体原理方面,在下下篇博客会涉及。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值