电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>基于Cordova移动IDE可使用HTML5和JS编写应用程序

基于Cordova移动IDE可使用HTML5和JS编写应用程序

2022-11-08 | zip | 0.10 MB | 次下载 | 免费

资料介绍

描述

介绍

大约一年前,我们买了一个 Echo,开始用 Wemo 开关和插头来装备我们的房子。能够告诉 Alexa 从温暖的床上关掉灯真是太好了。这就是我们 3 岁的女儿出现的地方。太短了,无法到达电灯开关,并且缺乏指导 Alexa 的白话,但有足够的决心继续尝试。那时我意识到,让我们的生活变得像成年人一样方便的相同技术可以让我们的孩子使用相同的设备。同时,我们可以建立一个与他们一起成长的伙伴。一个可以每周用不同的游戏进行编程的玩具,也可以演变成学习伙伴。最终,她有一天会成为一位朋友,自己学习编程,不仅可以弥合儿童和智能家居之间的鸿沟,

这是Seeed Grove 入门套件的理想选择。它配备了大量有趣的 I/O 设备,并有可能添加更多设备。更换新的东西(如距离传感器)就像插入电缆一样简单。

为了驱动盾牌,我正在使用新的Arduino 101 (加拿大和欧洲的 Genuino)。很像 Uno,但显着增加了陀螺仪、加速度计和蓝牙

最后,为了从 Arduino 控制 Wemo,我正在使用旧的 Android 手机(S4 Active),使用Evothings Studio ,这是一个基于 Cordova 的移动 IDE,可让您使用 HTML5 和 JS 编写应用程序。这将通过蓝牙与 101 配对,并通过Maker IFTTT通道控制 Wemo。

材料清单

硬件

  • 缝纫机/织物(或使用现有玩具)

软件

指示

阿杜诺/格罗夫

将 Grove Base Shield 放在 Arduino 上,然后连接随附的传感器和输出以匹配下图。

 
poYBAGNoo86AfZa_AALX4SN3iWs060.png
使用随附的带状电缆连接 Grove 外围设备
 

根据在线说明安装 Arduino IDE。使用 USB 电缆将软件运行插入 Arduino 101 板。在 IDE 中,转到 Tools>Board 并选择“Arduino/Genuino 101”。然后在工具>端口下选择您的板列出的端口,例如。COM3(Arduino/Genuino 101)。

从GitHub克隆、下载或复制代码并打开/arduino/Tedduino/Tedduino.ino

/* 
* Tedduino.ino 
* @author : Justin Revelstoke 
* @date : 3/25/2017 
* @description : Arduino code for BLE connection and Grove Shield I/O. 
*                Displays a menu over RGB LCD offering sensor data and 
*                an example game.                 
*/ 
#include  
#include  
#include "CurieIMU.h" 
#include "config.h" 
BLEPeripheral blePeripheral; 
BLEService bleService(serviceUUID); 
BLECharacteristic bleCharacteristic(characteristicUUID, BLERead | BLENotify, 2); 
#include "rgb_lcd.h" 
rgb_lcd lcd; 
const int B = 3975; 
const int pinTouch = 2; 
const int pinBuzzer = 3; 
const int pinButton = 4; 
const int pinVibe = 5; 
const int pinLED = 13; 
const int pinSound = A0; 
const int pinLight = A1; 
const int pinTemp = A2; 
const int pinPot = A3; 
int menu = 0; 
int previousButtonState = 0; 
int length = 15; // the number of notes 
char notes[] = "ccggaagffeeddc "; // a space represents a rest 
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; 
int tempo = 300; 
float aix, aiy, aiz;   // accelerometer values 
float gix, giy, giz;   // gyroscope values 
void setup() { 
 Serial.begin(9600); 
 lcd.begin(16, 2); 
 lcd.setCursor(0, 0); 
 pinMode(pinLED, OUTPUT); 
 pinMode(pinPot, INPUT); 
 pinMode(pinTouch, INPUT); 
 pinMode(pinButton, INPUT); 
 blePeripheral.setLocalName(bleServiceName); 
 blePeripheral.setAdvertisedServiceUuid(bleService.uuid()); 
 blePeripheral.addAttribute(bleService); 
 blePeripheral.addAttribute(bleCharacteristic); 
 const unsigned char bleCharArray[2] = { 0, (char)1 }; 
 bleCharacteristic.setValue(bleCharArray, 2); 
 blePeripheral.begin(); 
 CurieIMU.begin(); 
 CurieIMU.setGyroRate(25); 
 CurieIMU.setAccelerometerRate(25); 
 CurieIMU.setAccelerometerRange(2); 
 CurieIMU.setGyroRange(250); 
} 
void loop() { 
 printGyroAccel(); 
 digitalWrite(pinLED, LOW);   
 breath(REG_RED); 
 breath(REG_GREEN); 
 breath(REG_BLUE); 
 BLECentral central = blePeripheral.central(); 
 if (central) { 
   Serial.print("Connected to central: "); 
   Serial.println(central.address()); 
   while (central.connected()) { 
     displayMenu(); 
     delay(100); 
   } 
 } 
 delay(100); 
} 
void nextMenu() {   
 if (menu == 5) { 
   menu = 0; 
 } 
 else { 
   menu++; 
 } 
} 
void displayMenu() { 
 resetLCD(); 
 int buttonState = digitalRead(pinButton);  
 int touchState = digitalRead(pinTouch); 
 buttonState = buttonState | touchState;   
 if (previousButtonState != buttonState) { 
   if (buttonState == 1) { 
     const unsigned char bleCharArray[2] = { 0, (char)1 }; 
     bleCharacteristic.setValue(bleCharArray, 2); 
     nextMenu(); 
     delay(1000); 
   } 
   else {       
     const unsigned char bleCharArray[2] = { 0, (char)0 }; 
     bleCharacteristic.setValue(bleCharArray, 2); 
   } 
 } 
 delay(100); 
 previousButtonState = buttonState; 
 if (menu == 0) { 
   printSound(); 
 } 
 else if (menu == 1) { 
   printLight(); 
 } 
 else if (menu == 2) { 
   printTemp(); 
 } 
 else if (menu == 3) { 
   printVibe(); 
 } 
 else if (menu == 4) { 
   printPot(); 
 } 
 else if (menu == 5) { 
   nightMode(); 
 } 
 else if (menu == 6) { 
   printGyroAccel(); 
 } 
 else { 
   lcd.print("Error"); 
 } 
} 
void resetLCD() { 
 lcd.clear(); 
 lcd.setCursor(0, 0); 
} 
void printGyroAccel() { 
 CurieIMU.readAccelerometerScaled(aix, aiy, aiz); 
 CurieIMU.readGyroScaled(gix, giy, giz); 
 //CurieIMU.readMotionSensor(aix, aiy, aiz, gix, giy, giz); 
 lcd.print(aix); 
 lcd.print(' '); 
 lcd.print(aiy); 
 lcd.print(' '); 
 lcd.print(aiz); 
 lcd.setCursor(0, 1); 
 lcd.print(gix); 
 lcd.print(' '); 
 lcd.print(giy); 
 lcd.print(' '); 
 lcd.print(giz); 
 delay(100); 
 resetLCD(); 
} 
int getSound() { 
 int sensorValue = analogRead(pinSound); 
 return sensorValue; 
} 
void printSound() { 
 int sensorValue = getSound(); 
 lcd.print("Sound:"); 
 if (sensorValue > 0) { 
   for (int i = 0; i < round(sensorValue/100); i++) { 
     lcd.print(">"); 
   } 
 }   
} 
int getLight() { 
 int sensorValue = analogRead(pinLight); 
 return sensorValue; 
} 
void printLight() { 
 // range 0 - 1023 
 int sensorValue = getLight(); 
 lcd.print("Light:"); 
 if (sensorValue > 0) { 
   for (int i = 0; i < round(sensorValue/100); i++) { 
     lcd.print(">"); 
   } 
 }   
} 
int getTemp() { 
 int sensorValue = analogRead(pinTemp); 
 float resistance = (float)(1023-sensorValue)*10000/sensorValue; 
 int temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15; 
 return temperature; 
} 
void printTemp() { 
 lcd.print("Temp:"); 
 lcd.print(getTemp()); 
 lcd.print("F"); 
} 
int getPot() {   
 return analogRead(pinPot); 
} 
void printPot() { 
 lcd.print("Pot:"); 
 lcd.print(getPot()); 
} 
int getVibe() {   
 return digitalRead(pinVibe); 
} 
void printVibe() { 
 lcd.print("Vibe:"); 
 lcd.print(getVibe()); 
} 
void nightMode() { 
 bool warm = false; 
 bool dark = false; 
 bool quiet = false; 
 if (getTemp() >= 50) { 
   lcd.print("Warm "); 
   warm = true; 
 } 
 else { 
   lcd.print("Cold "); 
 } 
 if (getLight() == 0) { 
   lcd.print("Dark "); 
   dark = true; 
 } 
 else { 
   lcd.print("Light "); 
 } 
 if (getSound() < 100) { 
   lcd.print("Quiet "); 
   quiet = true; 
 } 
 else { 
   lcd.print("Loud "); 
 } 
 if (warm && dark && quiet) { 
   playSong(); 
 } 
} 
void playSong() {   
 for (int i = 0; i < length; i++) { 
   if (notes[i] == ' ') { 
     delay(beats[i] * tempo); // rest 
   } 
   else { 
     playNote(notes[i], beats[i] * tempo); 
   } 
   // pause between notes 
   delay(tempo / 2); 
 } 
} 
void playTone(int tone, int duration) { 
 for (long i = 0; i < duration * 1000L; i += tone * 2) { 
   digitalWrite(pinBuzzer, HIGH); 
   delayMicroseconds(tone); 
   digitalWrite(pinBuzzer, LOW); 
   delayMicroseconds(tone); 
 } 
} 
void playNote(char note, int duration) { 
 char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; 
 int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; 
 // play the tone corresponding to the note name 
 for (int i = 0; i < 8; i++) { 
   if (names[i] == note) { 
     playTone(tones[i], duration); 
   } 
 } 
} 
void breath(unsigned char color) 
{ 
   for(int i=0; i<255; i++) 
   { 
       lcd.setPWM(color, i); 
       delay(5); 
   } 
   delay(500); 
   for(int i=254; i>=0; i--) 
   { 
       lcd.setPWM(color, i); 
       delay(5); 
   } 
   delay(500); 
} 

确保config.h在同一目录中

/* 
* config.h 
* @author : Justin Revelstoke 
* @date : 3/25/2017 
* @description : Configuration  
*/ 
// You're device will appear in bluetooth connection lists under this name 
#define bleServiceName "Tedduino" 
#define serviceUUID "180D" 
#define characteristicUUID "2A37" 

单击 Arduino IDE 中的上传按钮,控制台应显示:

开始下载脚本...
SUCCESS:草图将在大约 5 秒内执行。

如果它工作正常,您现在应该看到 LCD 呈红色、绿色和蓝色闪烁。

此时 Arduino 正在宣传 BLE 连接,但具有许多“离线”功能。按下按钮或触摸传感器将在 LCD 上的各种显示中旋转,显示连接传感器的读数。还有一个示例“游戏”,要求您将 Arduino 放置在明亮|黑暗、温暖|寒冷或安静|响亮的地方。成功后会播放一​​首歌:)

进化论

现在设置 BLE 配套应用程序。如果您有兴趣了解有关低功耗蓝牙的更多信息,我强烈推荐Adafruit的这本入门书此外,如果您想使用 BLE 连接而不需要发出 Web 请求,Blynk是快速连接到 Arduino 的好方法。它只是不支持我在 BLE 上需要的功能。

因此,我们需要做的第一件事是下载并安装Evothings Studio (撰写本文时版本为 2.2.0)。请务必从下载页面获取云令牌。

 
poYBAGNoo9KAWgLhAADHo8kxf2Y101.png
复制并保存您的云令牌
 

接下来,从应用商店下载 Evothings Viewer

将 Studio 中的连接密钥输入到查看器中以链接它们。

 
pYYBAGNoo9SAUhqvAAC4dkDGXgw757.png
在 Connect 选项卡下,在查看器中生成密钥。
 

现在,从您之前克隆的同一个存储库中打开cordova文件夹并找到evothings.json文件。单击该文件并将其拖入 Evothings Studio 以创建项目。你现在应该看到...

 
poYBAGNoo9eAEyGJAACdZZt1ao8273.png
 

如果您单击“运行”,该应用程序应在您的手机上启动

 

IFTTT 集成

为了完成 Evothings 代码,我们需要在 IFTTT 中设置一个 Maker 频道。为此,请访问IFTTT 如果您还没有帐户,请登录或创建一个帐户。然后在“我的小程序”下单击“新建小程序”。按照下面的一系列图片设置您的 Maker 频道。请务必在设置您的网址后复制 Maker 为您生成的密钥。科尔多瓦需要它。创建两个通道,一个使用“tedduino_on”作为触发器,另一个使用“tedduino_off”。相应地为 WeMo 操作选择“打开”和“关闭”。

 
 
 
 
pYYBAGNoo9mAV850AACDoqBLZ3w364.png
 
1 / 9点击“这个”
 

如果一切顺利,我们现在应该有两个通道和一个 Maker 密钥。您可以在浏览器中测试 URL(它们应该类似于)。

把它们放在一起

从GitHub打开app文件夹中index.html回到 cordova 代码。找到这一行:

var makerKey = '/with/key/INSERT YOUR KEY HERE';

并用您的制造商频道密钥替换“在此处插入您的密钥”。保存并将您的 Evothings 工作室重新连接到查看器。

恭喜!此时您应该能够运行 Evothings 应用程序并单击“连接”。如果它成功连接到 Arduino,您可以按“测试”,LCD 应该停止改变颜色。您还应该能够按下 Grove 按钮来打开和关闭灯。

 

如果您对缝纫机很方便,我建议您设计自己的娃娃。否则,您可以轻松地将这些部件改装成现有的部件。只需用 Arduino 电池组替换 USB 电缆即可。热胶是保持部件到位的好方法。玩得开心!

 
 
 
 
poYBAGNoo-GAKx1FABEmViWjzf0403.jpg
 
1 / 3
 

随着时间的推移,我们家的更多方面变得自动化,我希望制造更多这样的设备,让我们的孩子更加独立。

 

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费