一文读懂机智云物联网APP开发

news2024/12/26 21:27:00
本教程可用于C2 DevKit开发板套件全功能展示用于对shineblink C2 DevKit开发套件全面学习使用,shineblink&及机智云技术交流群(234976524)。开发板相关的进阶教程及DIY应用将在后续持续更新。

        教程主要包含以下内容:
        1.LED1(黄灯开关)开关控制
        2.LED2(绿灯开关)开关控制
        3.人体检测(有人1,无人0)
        4.按键检测(BTN1控制黄灯开关,BTN2控制绿灯开关。)
        5. LED_PWM(红灯亮度)调光控制(蜂鸣器,3610电机, LED_PWM三个功能需要切换跳冒,控制一个功能的时候另外2个现象会随之改变,控制的时候要切换D0跳冒到对应的接口才有效果)
        6.蜂鸣器开关(蜂鸣器,3610电机, LED_PWM三个功能需要切换跳冒,控制一个功能的时候另外2个现象会随之改变,控制的时候要切换D0跳冒到对应的接口才有效果)
        7.3610电机调速蜂(鸣器,3610电机, LED_PWM三个功能需要切换跳冒,控制一个功能的时候另外2个现象会随之改变,控制的时候要切换D0跳冒到对应的接口才有效果)
        8.继电器开关
        9.OLED屏幕(为了展示,此处仅展示部分显示效果)
        10.温湿度采集
        11.可调电阻电压显示
        12.光敏电阻电压显示(开发者可以转换成光照强度)


 

        一、云端部署
        1.进入机智云开发者中心:机智云 开发者中心,没有账号的可以申请注册账号。
2.创建产品
注册账号之后点击左上角创建

根据自己需求选择对应的分类

输入产品名称和选择通讯方式后点击创建,新建一个产品。
3.数据点导入(数据点模板可在附件进行下载ShineBlink.xlsx)
创建产品后在产品的产品信息页面里,在标准数据点里面点击导入,选择ShineBlink.xlsx文件。

修改显示名称,为本项目需要用到的数据点进行命名,方便后续的区分。例如黄灯,如图操作之后确定即可更改。


 

修改完所有参数过后如图所示(如果不想自己修改,那么在标准数据点里面点击导入附件中的ShineBlink_c2_data.xlsx)

3.APP快速生成
回到开发者中心首页,点击右上角创建,选择移动应用,输入应用包名和应用名称后,根据自己需求选择关联或者不关联用户之后选择确认,创建一个移动应用。

在用户关联里面选择我们创建好数据点的产品

关联我们之前创建好数据点的shineblink产品(其他自定义更改可参考APP开发的相关文档https://devdocs.gizwits.com/zh-cn/AppDev/APP/AddApp/CreatApp.html)。

APP页面编辑,回到我们创建数据点的产品,点击控制页面,配置智能场景,可用于定时,延时等智能化规则操作。

进入控制页面,选择通用模板,在功能里面勾选我们用到的数据点,如果勾选全部数据点,会导致APP多出无用的数据点,在功能里面对我们的显示进行排序和大小图标调整。配置后记得需要保存。

构建应用,进入应用后点击顶部有构建应用,等待构建完成后,扫描二维码即可下载APP。

APP部分页面如图所示

到此云端部署完成。

二、程序开发
1.基础参数配置
将开发板连接至电脑,或者电脑创建main.lua文件,选用自己熟悉的编辑器打开main.lua(比如notapad++)。

添加机智云参数初始化程序。
代码如下(尽量别再网页复制代码,有时候编码不一致会导致程序不通过):
--机智云平台为每个产品类别分配的唯一PK和PS,一定要改成您自己的PK和PS
PK = "bf4e8824edbb4ada934c6ca4c8d30eb1"
PS = "f32f10d34fcd4a4784a8de13dc2ee01b"
--初始化4G模块
LIB_Giz4GConfig(PK,PS,6000,0,"UART0","D5","HIGH","D6","HIGH")

2.添加继电器开关程序,根据电路图可知,继电器为高电平使能。
代码如下:
--初始化继电器GPIO
LIB_GpioOutputConfig("D4","STANDARD")
--默认继电器为关闭状态
LIB_GpioWrite("D4",0)

        --查询机智云是否下发了写"Sw3"开关量数据点的动作
        flag,recv_data = LIB_RecvFromGizCloud("Sw3")
        if flag == 1 then
                if recv_data == 1 then -- 云下发了1
                        LIB_GpioWrite("D4",1)--继电器打开
                else -- 云下发了0
                        LIB_GpioWrite("D4",0)--继电器关闭
                end
        end

3.人体感应,根据电路图可知,红外采用数字探头NS312,当探头感应到人体时输出高电平2S,否则输出低电平2s,该输出端口接到开发板的D7引脚。
代码如下:
--人体感应初始化
LIB_GpioInputConfig("D7","NOPULL")

        --读取人体感应输入引脚的电平值
    Alarm = LIB_GpioRead("D7")
    --根据传感器状态上报云端
    if Alarm == 1 then
        --上传云端感应到人体
        LIB_SendToGizCloud("In1", Alarm)
    elseif Alarm == 0 then
        --上传云端未感应到人体
        LIB_SendToGizCloud("In1", Alarm)
End

4.温湿度采集,OLED显示,根据开发板电路图可知温湿度传感器SHT30在开发板的接口为IIC0(SCL0,SDA0),Oled屏幕在开发板的接口为IIC1(SCL1,SDA1)
代码如下:
--设置sht3x传感器占用SCL0和SDA0引脚,并启动传感器以每秒出10个数据的频率工作,repeatability="HIGH"时精度最高
LIB_Sht3xConfig("IIC0","10","HIGH")
--设置0.96寸oled模块占用SCL1和SDA1引脚
LIB_0_96_OledConfig("IIC1")
        --查询sht3x传感器是否出数
    sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult()
    --如果传感器有新的温湿度数据产生
    if sht3x_flag == 1 then
        --在oled的第一行和第二行分别显示温度(摄氏度)和湿度(百分比)
        LIB_0_96_OledPuts("1","1",string.format("temprature: %.2f", sht3x_temp))
        LIB_0_96_OledPuts("2","1",string.format("humidity: %.2f", sht3x_humi))
                --向机智云发送温度和湿度数据
        LIB_SendToGizCloud("Rf3", sht3x_temp)
        LIB_SendToGizCloud("Rf4", sht3x_humi)
    end

5.按键;黄灯,绿灯开关控制,本教程将展示APP控制黄灯,绿灯,按键控制黄灯,绿灯,并同步状态。根据电路图可知,按键按下低电平,LED低电平点亮。
代码如下:
--初始化D8引脚,黄灯
LIB_GpioOutputConfig("D8","STANDARD")
--初始化D9引脚,绿灯
LIB_GpioOutputConfig("D9","STANDARD")
--设置按键"BTN1"(占用D10口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN1","D10","L")
--设置按键"BTN1"(占用D11口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN2","D11","L")
led1_value = 0        --黄灯状态
led2_value = 0        --绿灯状态

        --查询机智云是否下发了写"Sw1"开关量数据点的动作
        flag,recv_data = LIB_RecvFromGizCloud("Sw1")
                if recv_data == 1 then -- 云下发了1        
                        led1_value=1
                else -- 云下发了0
                        led1_value=0
                end
        --查询机智云是否下发了写"Sw2"开关量数据点的动作
        flag,recv_data = LIB_RecvFromGizCloud("Sw2")
                if recv_data == 1 then -- 云下发了1
                        led2_value=1
                else -- 云下发了0
                        led2_value=0
                end        
        --轮询按键事件
    key_value = LIB_ButtonQuery("BTN1")
    --如果按键1短按过,切换LED1状态
    if key_value == 1 then
                if led1_value ==1 then
                        led1_value=0
                        LIB_SendToGizCloud("Sw1", led1_value)--同步状态
                else
                        led1_value=1
                        LIB_SendToGizCloud("Sw1", led1_value)--同步状态
                end
    end
    key_value = LIB_ButtonQuery("BTN2")
    --如果按键2短按过,切换LED2状态
    if key_value == 1 then
        if led2_value ==1 then
                        led2_value=0
                        LIB_SendToGizCloud("Sw2", led2_value)--同步状态
                else
                        led2_value=1
                        LIB_SendToGizCloud("Sw2", led2_value)--同步状态
                end
    end
        if led1_value==1 then
                LIB_GpioWrite("D8",0)--黄灯打开
        else
                LIB_GpioWrite("D8",1)--黄灯关闭
        end
        if led2_value==1 then
                LIB_GpioWrite("D9",0)--绿灯打开
        else
                LIB_GpioWrite("D9",1)--绿灯关闭
        end

6. 可调电阻电压显示和光敏电阻电压显示。根据手册及电路图可知,模拟旋钮电压采集其工作原理为电阻分压的方式,通过A0端口采集可变电阻的电压。光敏感应的原理为当光照越强,LS06的电阻越小,实际上仍然是电阻分压的原理,采用A1端口采集电压。
OLED显示代码及上传云端代码如下:
--配置A0-A3这四个通道同时开始工作,当每个通道采集满50个点时缓存满,每个点的采集时间间隔为10ms
LIB_ADConfig(50,10000)
AD0=0.0
AD1=0.0

    A0_full_flag, A0_tab = LIB_ADCheckBufFull("A0")
    --每当A0通道的缓存满以后,计算缓存内的50个元素的平均值,并换算成电压值
    if A0_full_flag == 1 then
        SUM = 0
        for i = 1, #A0_tab do --此处#A0_tab的值是50,表示A0_tab表内的元素个数
            SUM = SUM + A0_tab
        end
        AVER = SUM / #A0_tab
        AD0=AVER*3.6/4096.0
        --将A0通道的AD值转换成实际电压显示出来,注意这里是保留小数点后一位
        LIB_0_96_OledPuts("3","1",string.format("AD0:%.1f", AD0))
                LIB_SendToGizCloud("Rf1", AD0)
    end
        --每当A1通道的缓存满以后,计算缓存内的50个元素的平均值,并换算成电压值
    A1_full_flag, A1_tab = LIB_ADCheckBufFull("A1")
    if A1_full_flag == 1 then
        SUM = 0
        for i = 1, #A1_tab do --此处#A1_tab的值是50,表示A0_tab表内的元素个数
            SUM = SUM + A1_tab
        end
        AVER = SUM / #A1_tab
        AD1=AVER*3.6/4096.0
        --将A1通道的AD值转换成实际电压显示出来,注意这里是保留小数点后一位
        LIB_0_96_OledPuts("4","1",string.format("AD1:%.1f", AD1))
                LIB_SendToGizCloud("Rf2", AD1)
end
7.蜂鸣器,此教程效果需要将D0跳冒接到最左侧的BUZ上才能实现效果。此无源蜂鸣器工作电压为2~5V,其工作频率为2700HZ,高电平使能。根据其参数,需将PWM周期配置为1/2700=370us。高电平的占空比将决定其音量大小,此次实验为开关动作,音量固定。。
实现代码如下:
--配置D0口为PWM功能,参数370表示PWM的周期为370us,参数1表示高电平有效
LIB_PwmConfig1(370,1)
--更新D0口的PWM输出占空比为0
LIB_PwmUpdate1(0)
cnt = 0
--查询机智云是否下发了写"Sw4"开关量数据点的动作
        flag,recv_data = LIB_RecvFromGizCloud("Sw4")
        if flag == 1 then
                if recv_data == 1 then -- 云下发了1
                        cnt = 185
                        --蜂鸣器打开
                else -- 云下发了0
                        cnt = 0
                        --蜂鸣器关闭
                end
                LIB_PwmUpdate1(cnt)
        end
8.红灯亮度调节,红灯亮度调节主要用到D0口PWM功能,效果演示需要将D0跳冒插到中间的LED上,此实验演示LED的100个不同亮度。
代码如下:
--查询机智云是否下发了写"Ws2"开关量数据点的动作
        flag,recv_data = LIB_RecvFromGizCloud("Ws2")
        if flag == 1 then
                if Ws2==0 then
                        cnt=370
                else
                        cnt =300 - Ws2 *3
                end
                LIB_PwmUpdate1(cnt)
        end
9. 3610电机调速,主要用到D0口PWM功能,效果演示需要将D0跳冒插到中间的MOT上,此实验演示电机的100个不同速度。
代码如下:
        --查询机智云是否下发了写"Ws2"开关量数据点的动作
        flag,recv_data = LIB_RecvFromGizCloud("Ws3")
        if flag == 1 then
                if Ws2==0 then
                        cnt=0
                else
                        cnt = Ws2 *3
                end
                --红灯亮度调节
                LIB_PwmUpdate1(cnt)
        end        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

客户案例 | 举重若轻,低代码培育核心业务能力工坊

关键发现 用户痛点:传统套件式项目管理软件在中小企业或业务流程相对简单的企业中适配度低,不够灵活,性价比低,需要一套针对不同业务流程可以灵活配置的、轻量化的项目管理系统。 解决方案:基于西门子低代码开发平台…

六、Git远程仓库操作——创建远程库、推送拉取和克隆远程库等操作

1. 远程仓库介绍 前面的关于git的操作,都是基于本地仓库进行操作的。 但是如果我们想通过 Git 分享自己的代码或者与其他开发人员合作,这时我们就需要将数据放到一台其他开发人员能够连接的服务器上,这台服务器就是代码托管中心&#xff0c…

webpack热更新原理解析

热更新原理 1. webpack-dev-server启动本地服务 这里首先会启动webpack并生成compiler实例(compiler实例通过各种事件钩子可以实现监听编译无效、编译结束等功能); 然后会通过express启动一个本地服务,用于服务浏览器对打包资源…

前端中的身份认证

一.Cookie 1.1.HTTP协议的无状态性 HTTP协议的无状态: 客户端的每次HTTP请求都是独立的,之间没有直接关系 服务器不会主动保留每次HTTP请求的状态 1.2.任何突破HTTP无状态的限制 发会员卡 注意: ​ 现实中,会员卡身份认证方式,在…

03 - 调试环境的搭建(Bochs)

---- 整理自狄泰软件唐佐林老师课程 1. Bochs(另一款优秀的虚拟机软件) 专业模拟x86架构的虚拟机 开源且高度可移植,由C编写完成 支持操作系统开发过程中的断点调试 通过简单配置就能运行绝大多数主流的操作系统 2. Bochs的安装与配置 下载…

[附源码]计算机毕业设计社区人员信息管理系统设计与实现Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

HRB系列直流隔离可调电源模块:用20K电位器和200K电位器区别

今天俞霖科技小编简谈如何合理地选用DC-DC模块电源,本文将从DC-DC模块电源开发设计的角度来简谈以上问题,以供广大技术设计人员参考。 DC-DC模块电源的众多优点是大家众所周知的,DC-DC模块电源以其体积小巧、性能卓异、使用方便的显著特点&a…

ArcGIS API For JavaScript(8)之使用动态图层dynamicLayers实现多图层合并截图

场景还原: 定位某个矢量图斑范围面,过滤展示该图斑,以图斑为中心,截图图斑周边并附带影像底图的截图。 在前端要实现地图截图,首先想到的是使用arcgis rest api中的export接口,这是没问题的,exp…

工业物联网关-modbus数据采集程序(1-程序设计)

写代码之前 最近代码写慢了,磨了好久都没开始动手写代码。考虑的东西越多越多,甚至自己都认为过虑了。就像这个程序,写代码之前估计花了大半天或者一天在思考怎么写,不知道是好事还是年纪大了。所以专门写篇文章,把自…

为什么要选择 Redis?

文章目录前言一、选型二、协议三、客户端1、常见 java 客户端2、常见可视化工具:四、Redis 生态1、模块2、代理3、其他前言 Redis(Remote Dictionary Server),即「远程字典服务」是一个使用 ANSI C 编写的、开源的、支持网络的、…

【电力系统】基于YALMIP 的微网(光伏+风电+蓄电池+微电网+柴油机)优化调度模型附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

Unity—UGUI

每日一句:读数、学习 去更远的地方,才能摆脱那些你不屑一顾的圈子 目录 InputFiled输入框 例:用户名和密码 Toggle组件 案例:冷却效果 InputFiled输入框 Text Component 输入文本组件 Text输入内容 Character Limit 输入字符…

宝塔后渗透-添加用户_反弹shell

更新时间:2022年11月21日 1. 背景介绍 对于想拿到bt后台来说,非常的艰难:无非是通过bypass之后提权,直接拿到服务器的root权限,然后再去宝塔后台。 当然,还有一种运气十分爆棚的方法:发现了b…

Qt的Q_UNUSED()函数的功能

目录Qt Assistant(Qt 助手)构建场景其他一些平替方法参考Qt Assistant(Qt 助手) 函数名直译过来是【不用的;从未用过的】。 碰到陌生的函数不要慌,直接Qt Assistant查一哈。 Q_UNUSED(name) Indicates to …

负载均衡器 OpenELB ARP 欺骗技术解析

作者:大飞哥,视源电子运维工程师,KubeSphere 用户委员会广州站站长,KubeSphere Ambassador。 K8S 对集群外暴露服务有三种方式:NodePort,Ingress 和 Loadbalancer。NodePort 用于暴露 TCP 服务(4 层)&#…

基于5G智能网关的水泵远程监控系统方案

方案背景 水泵作为一种常见的水务设备,在日常的生产、生活中发挥重要的作用。为了保证生产、生活用水,也为了预防异常天气带来的过度降水,水泵具备的供水、排水作用都是不可忽视的。然而,很多地区的水泵管理模式依然停留在专人看…

毕业设计-基于机器视觉的手写字识别系统

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

变焦镜头内参数如何获得?

很多时候,我们是使用相应的棋盘格标定进行相机内参数的获取,但是对于相机而言,如果要是焦距范围是测量比较远的物体,那么我们要进行注意相应的内参数就是不能够使用棋盘格标定法进行获取,因为不准. 由于项目的需要,这里我就是需要进行探究一下,如何通过自己调试直接设定内参数…

CSS 实现卡片边框渐变动画

前言 &#x1f44f;CSS实现卡片边框渐变动画&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 父容器添加背景渐变色 <div class"card"></div>.card {background: linear-gradient(0deg, …

Tensorboader图片和模型可视化

非常简单&#xff0c;10分钟搞懂1 Tensorboader介绍2 进行写入和运行&#xff08;共2步&#xff09;3 图像显示3.1 显示图片3.2 显示模型3.3 动态显示学习率等参考文献1 Tensorboader介绍 它就是1个可视化工具&#xff0c;需要用pip进行下载&#xff1b; 下载以后进行显示&a…