本帖最后由 Kara 于 2024-7-10 11:49 编辑
FlexLua低代码零基础开发智能垃圾桶产品原型(接入机智云)
一、目标功能介绍基于功能强大的 ShineBlink 低代码物联网核心模组和灵活轻巧的 Lua 脚本编程语言实现如下功能:
监测和报警• 监测圾桶内的烟雾并声光报警 • 监测圾桶内的酒精等有害气体并声光报警 • 监测垃圾桶内的温湿度并通过4G模块上报给机智云 • 通过激光测距模块监测垃圾桶内的剩余空间并通过4G模块上报给机智云
感应和控制• 毫米波雷达模块感应人体靠经,并通过舵机控制垃圾桶盖开合
4G上云通信• 4G 通信模组需选择带有机智云 Gagant 固件的 4G 通信模组
二、软件功能框图
三、云和App (1)操作流程
采用零基础上手开发的机智云,即可快速将设备上云,并可以使用机智云自动生成的 App(安卓&iOS)实现手机远程访问设备的目的。机智云的开发流程比较简单,下面仅介绍大致的步骤,具体操作开发者可自行注册机智云开发平台,按如下步骤操作一遍即可上手。
•注册登录机智云开发者中心
•创建产品(类目选择“其他” + “其他”)
–记录创建产品的 PK 和 PS,后面会用到
–通信模组选择“移动网络”
–导入 shineblink.xlsx 数据点文件(Excel 文件),并将需要用到的数据点的名称改成你想设置的名称(注意:只改名称其他别改)
–在产品的“控制页面”中“功能”里你会看到刚刚导入的所有数据点项目,在这里关闭掉没用的数据点,并根据你的喜好调整你用到的数据点的图标和大小
•创建应用(选择移动应用,勾选 "Andorid")
•在创建的应用中关联刚刚创建的产品
•在创建的应用中的“构建应用”中开始编译生成 App,一天只有两次机会请慎重使用,编译成功后扫码即可下载 App 安装包
•手机安装好 App 后,扫码设备的二维码即可使用了(设备二维码生成在后面会讲)
(2)二维码生成
•在机智云官网下载 Gagant_Debuger.exe 软件安装在电脑上
•在软件的“工具”栏目中找到“设备二维码”
•在Product Key中填入 PK,在 MAC/IMEI 中填入机智云 4G 模组外壳上面的 IMEI 号
•选择国内服务器,最后点击即可生成设备二维码
(3)App截图
四、硬件实物图
五、源代码
- --机智云平台为每个产品类别分配的唯一PK和PS,一定要改成您自己的PK和PS
- PK = "03634fa8920e4b5ab1c5f3ffdffefce3"
- PS = "46253f7e305c4d3e80605263f49f9df4"
- -----------全局变量定义-------------
- WaitPeriodCntMs = 0
- FireVoltage = 0.00 --火焰传感器电压值,火焰越强,传感器输出的电压值越低
- AchVoltage = 0.00 --酒精传感器电压值,酒精浓度越高,传感器输出的电压值越大
-
- --定义10毫秒定时器的回调函数,函数名字必须是LIB_10msTimerCallback
- function LIB_10msTimerCallback()
- WaitPeriodCntMs = WaitPeriodCntMs + 10
-
- end
-
- --开始声光报警
- function AlarmStart()
- LIB_LedStartWork("LED2") --LED2开始闪烁
- LIB_GpioWrite("D7",1) --蜂鸣器开始响
- end
-
- --停止声光报警
- function AlarmStop()
- LIB_LedStopWork("LED2") --LED2停止闪烁
- LIB_GpioWrite("D7",0) --蜂鸣器停止响
- end
-
- function Init()
- --配置D8端口控制开发板上的LED1灯,用来指示4G模块是否连上机智云
- LIB_GpioOutputConfig("D8","STANDARD")
- --配置D7端口控制蜂鸣器,用来作为报警声音指示功能
- LIB_GpioOutputConfig("D7","STANDARD")
- --设置"LED2"(占用D9端口)以0.1秒频率闪烁,用来作为报警灯闪烁指示功能
- LIB_LedConfig("LED2","D9","L",100,100)
- --停止报警
- AlarmStop()
- --配置D4口为普通输入,连接红外人体感应传感器的OUT引脚
- LIB_GpioInputConfig("D4","NOPULL")
- --配置D0为舵机PWM端口,PWM周期20ms,高电平为有效极性
- LIB_PwmConfig1(20000,1)
- LIB_PwmUpdate1(500) --舵机转到0度关闭垃圾桶盖
- --配置AD电压采集功能,用来采集烟雾传感器MQ-2(A3)和MQ-3酒精传感器(A0)的电压值,测量范围0-3.60v
- LIB_ADConfig(1,300000)
- --初始化4G模块
- LIB_Giz4GConfig(PK,PS,6000,120,"UART0","D5","HIGH","D6","HIGH")
- --初始化SHT30温湿度传感器占用IIC1接口的SCL1和SDA1引脚
- LIB_Sht3xConfig("IIC1","10","HIGH")
- --配置VL53L0X激光传感器占用IIC0接口的SCL0和SDA0引脚,测垃圾桶空间
- --高精度模式下,精度在3%以内,测量范围在1.2米以内
- LIB_VL53L0XConfig("IIC0", "HighAccuracy")
- --使能系统10毫秒定时器开始工作
- LIB_10msTimerConfig("ENABLE")
- end
-
- --初始化硬件
- Init()
- --开始大循环
- while(GC(1) == true)
- do
- --读取人体红外感应,感应到人体后自动控制舵机打开垃圾桶
- gpio_value = LIB_GpioRead("D4")
- if gpio_value == 1 then --感应到人体
- LIB_PwmUpdate1(1500) --舵机转到90度打开垃圾桶盖
- else
- LIB_PwmUpdate1(500) --舵机转到0度关闭垃圾桶盖
- end
-
- --查询SHT30温湿度传感器是否出数
- sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult()
- --如果传感器有新的温湿度数据产生
- if sht3x_flag == 1 then
- --TF卡LOG.TXT和PC串口终端打印
- print(string.format("Temp: %.1f\r\nHumi: %.1f", sht3x_temp, sht3x_humi))
- --4G发送温度和湿度
- LIB_SendToGizCloud("Rf1", sht3x_temp)
- LIB_SendToGizCloud("Rf2", sht3x_humi)
- end
-
- --测量酒精传感器MQ-3输出的电压值
- A0_full_flag, A0_buf = LIB_ADCheckBufFull("A0")
- if A0_full_flag == 1 then
- voltage = A0_buf[1]*3.6/4096.0
- AchVoltage = voltage
- --打印输出A0通道的AD采样电压值
- print(string.format("Voltage=%.2fv", voltage))
- --4G发送酒精传感器电压值(酒精浓度越高,传感器输出的电压值越大)
- LIB_SendToGizCloud("Rf3", voltage)
- end
-
- --测量烟雾传感器MQ-2输出的电压值
- A3_full_flag, A3_buf = LIB_ADCheckBufFull("A3")
- if A3_full_flag == 1 then
- voltage = A3_buf[1]*3.6/4096.0
- FireVoltage = voltage
- --打印输出A0通道的AD采样电压值
- print(string.format("Voltage=%.2fv", voltage))
- --4G发送烟雾传感器电压值(烟雾越强,传感器输出的电压值越大)
- LIB_SendToGizCloud("Rf4", voltage)
- end
-
- --查询激光测距传感器是否出数
- flag, distance = LIB_VL53L0XGetDistance()
- if flag == 1 then
- --打印测量距离(mm)
- print(string.format("distance:%dmm", distance))
- --4G发送距离值(垃圾桶空间)
- LIB_SendToGizCloud("RL8", distance)
- end
-
- --报警判断
- --酒精传感器电压高于 1.02v 或者烟雾传感器电压高于 1.5v,声光报警
- if AchVoltage > 1.02 or FireVoltage > 1.5 then
- AlarmStart()
- else
- AlarmStop()
- end
-
- --读取机智云4G模组状态,LED1灯亮表示连上机智云
- State = LIB_GetGizWifiState()
- if State == 6 then
- LIB_GpioWrite("D8",0)--LED1灯亮
- else
- LIB_GpioWrite("D8",1)--LED1灯灭
- end
- end
复制代码
|