项目来源:
为满足新课标中六年级“过程与控制”内容要求,结合教学中农业生产场景中的智能种植大棚项目,设计了《基于行空板K10的智能种植物联网平台》。
项目简介:
在《基于行空板K10的智能种植物联网平台》项目中,学生将利用行空板K10来模拟监测智能大棚里面的温度、湿度、光照、灯光状态、通风装置状态。
通过行空板自带的温湿度传感器和光照传感器检测种植大棚里的温湿度和光照,并把数据发送到物联网平台,搭建可视化物联网平台,使其他设备可以在线查看大棚情况。管理人员可以根据实时监测的数据,通过物联网控制大棚灯光和通风设备的开与关。行空板上也实时显示温湿度、灯光、通风设备开关状态。
灯光及通风设备的开与关可以通过可视化物联网平台进行控制,灯光还可以通过行空板上的A B键控制。
项目原理:
1.行空板K10自带传感器监测温湿度及光照,并通过物联网传送到可视化平台。2.灯光及通风装置开关可以通过物联网平台进行控制,灯光的控制也可以通过星空般控制。
硬件简介:
行空板K10是一款专为信息科技课程中的编程学习、物联网及AI项目教学需求而开发的学习板。它集摄像头、LCD彩屏、麦克风、扬声器、WiFi蓝牙模块、RGB指示灯及多种传感器和扩展接口于一体,无需额外设备即可实现传感器控制、物联网应用、图像检测、语音识别、语音合成等AI项目。
程序如下:
代码
/*!
* MindPlus
* esp32s3bit
*
*/
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include "Arduino_image_cache.h"
// 动态变量
String mind_s_DengGuangZhuangTai, mind_s_TongFengZhuangTai;
volatile float mind_n_WenDu, mind_n_ShiDu, mind_n_GuangZhaoQiangDu;
// 函数声明
void obloqMqttEventT3159k(String& message);
void obloqMqttEventTy2lse(String& message);
void obloqMqttEventTmjhbj(String& message);
void onButtonAPressed();
void obloqMqttEventTm8dmk(String& message);
void onButtonBPressed();
// 静态常量
const String topics[5] = {"siot/温度","siot/光照","siot/LED","siot/湿度","siot/通风设备"};
const MsgHandleCb msgHandles[5] = {obloqMqttEventTm8dmk,NULL,obloqMqttEventT3159k,obloqMqttEventTmjhbj,obloqMqttEventTy2lse};
// 创建对象
DFRobot_Iot myIot;
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
AHT20 aht20;
// 主程序开始
void setup() {
k10.begin();
myIot.setMqttCallback(msgHandles);
pinMode(P0, OUTPUT);
k10.initScreen(screen_dir);
k10.creatCanvas();
k10.buttonA->setPressedCallback(onButtonAPressed);
k10.buttonB->setPressedCallback(onButtonBPressed);
myIot.wifiConnect("CMCC", "87654321");
myIot.init("192.168.0.104","siot","5413935061589561","dfrobot", topics, 1883);
myIot.connect();
k10.canvas->canvasText("智能种植物联网平台", 1, 0x0000FF);
k10.canvas->canvasDrawBitmap(10,40,60,60,image_data1);
k10.canvas->canvasDrawBitmap(10,130,60,60,image_data2);
k10.canvas->updateCanvas();
}
void loop() {
mind_n_WenDu = ((round((aht20.getData(AHT20::eAHT20TempC) * 10))) / 10);
mind_n_ShiDu = ((round((aht20.getData(AHT20::eAHT20HumiRH) * 10))) / 10);
mind_n_GuangZhaoQiangDu = k10.readALS();
myIot.publish(topic_0, mind_n_WenDu, 1);
myIot.publish(topic_1, mind_n_GuangZhaoQiangDu, 1);
myIot.publish(topic_3, mind_n_ShiDu, 1);
k10.canvas->canvasText((String("灯光状态:") + String(mind_s_DengGuangZhuangTai)), 11, 0x0000FF);
k10.canvas->canvasText((String("通风装置状态:") + String(mind_s_TongFengZhuangTai)), 12, 0x0000FF);
k10.canvas->updateCanvas();
}
// 事件回调函数
void obloqMqttEventT3159k(String& message) {
if ((message==String("on"))) {
k10.rgb->write(-1, 0xFF0000);
mind_s_DengGuangZhuangTai = "开";
}
if ((message==String("off"))) {
k10.rgb->write(-1, 0x000000);
mind_s_DengGuangZhuangTai = "关";
}
}
void obloqMqttEventTy2lse(String& message) {
if ((message==String("on"))) {
digitalWrite(P0, HIGH);
mind_s_TongFengZhuangTai = "开";
}
if ((message==String("off"))) {
digitalWrite(P0, LOW);
mind_s_TongFengZhuangTai = "关";
}
}
void obloqMqttEventTmjhbj(String& message) {
k10.canvas->canvasText((String(message) + String("%RH")), 9, 0xFF0000);
k10.canvas->updateCanvas();
}
void onButtonAPressed() {
k10.rgb->write(-1, 0xFF0000);
mind_s_DengGuangZhuangTai = "开";
}
void obloqMqttEventTm8dmk(String& message) {
k10.canvas->canvasText((String(message) + String("℃")), 5, 0xFF0000);
k10.canvas->updateCanvas();
}
void onButtonBPressed() {
k10.rgb->write(-1, 0x000000);
mind_s_DengGuangZhuangTai = "关";
}
评论