×

使用涂鸦link SDK的土壤水分数据检索应用

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-14

张文

分享资料个

描述

在本文中,我们将使用涂鸦 Link SDK、涂鸦智能 Android App、Python 和 Arduino IDE 开发土壤水分数据检索系统。湿度传感器连接到 ESP32 板以实现此应用程序。

水分数据将记录在 .csv 文件中,并显示在涂鸦智能 App 上。这对于需要保持最佳土壤水分以使植物正常生长的家庭种植园、花卉栽培、园艺、农业等非常有用。

GitHub链接:https ://github.com/JayeshRajam/Tuya-sensorapp

Tuya Link SDK 硬件连接

连接非常简单。ESP32 板的 32 针脚接收来自湿度传感器的模拟信号。连接 ESP32 板的 Vcc 和 GND 以及湿度传感器。

poYBAGNf8cCAR-_nAABeab-OorU596.png
 

如果您有这样的湿度传感器连接是相同的,但可能需要一些额外的跨接电缆。

Tuya Link SDK 应用设置

首先,在涂鸦平台创建一个账号。

pYYBAGNf8cKAI0UCAABYkNBDtl8761.jpg
 

在 Python 中安装 tuyaos-link-sdk 。

git clone https://github.com/tuya/tuyaos-link-sdk-python.gitpython -m pip install ./tuyaos-link-sdk-python
poYBAGNf8cWAS29NAAMJl2qWwi8377.jpg
 

涂鸦物联网平台(Web)

登录后,创建一个新产品(按照这个简单的教程作为涂鸦的入门指南),得到以下屏幕。

pYYBAGNf8cmAMgwkAABhyHKEwv0312.jpg
 

现在通过单击具有以下属性的“添加”按钮添加以下功能。

poYBAGNf8cqAJVgPAAATSh-UguE634.jpg
 

接下来,完成UI Studio 设计。UI 设计应该是这样的。测试并发布它以解决任何错误。

pYYBAGNf8cyAMC32AABHIXdzjnU382.jpg
 

注意:刷新涂鸦服务器时,提供了切换按钮,每次切换按钮都会将当前湿度读数记录在 MS.csv 文件中。

在编辑器中打开 GitHub 存储库中的 sensorapp.py 文件。编辑和更改文件中连接的 ESP32 设备的 productid、uuid、authkey(通过Link SDK 的许可证生成获得)和 COM 端口。保存这个编辑过的文件,作为本文的输出部分。

涂鸦智能应用(安卓)

安装并设置好涂鸦智能 App,只需点击扫描仪按钮即可扫描 sensorapp.py 文件生成的二维码。

poYBAGNf8c6ATRulAAAXkLrno-M311.jpg
 
pYYBAGNf8dGAPLCXAAAzOWb9yD4253.jpg
 

 

pYYBAGNf8dOASOvIAAIMPEpJwN8311.jpg
 

现在 MoistureApp 将被添加到涂鸦智能 App 的所有设备部分。

poYBAGNf8dWACIpyAAAbA8OtaVE508.jpg
 

Arduino IDE 配置 Tuya Link SDK

GitHub repo 中的 Arduino IDE 程序通过串口将 ESP32 板从湿度传感器接收到的湿度读数发送到 python 程序。只需在 Arduino IDE 中添加您的 ESP32 板,编译并刷新 sensorapp.ino 程序。

调整代码中的百分比值以适合传感器配置。

pYYBAGNf8deAfSjFAADBKGYxdjY792.jpg
 

董事会经理网址:https ://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

输出

使用命令运行 ledapp.py 文件

python ./ledapp.py
 

MS.csv 文件内容(时间戳、土壤水分读数)

poYBAGNf8dqAGF9ZAABpSPsTai4571.jpg
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用涂鸦link SDK的土壤水分数据检索应用',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);