Mingming.Zhang 发表于 2018-6-21 14:21:13

七夕-I‘m with you 物联网装置

https://www.bilibili.com/video/av29601520


都说陪伴是最长情的告白。如何异地 每一刻的小悸动?也可以更直接的传达给另一半
除了文字、表情、语音以外


想到风车和蝶,身处异地的2人简单示意的传递情绪和思恋
利用2片esp8266(类似arduino+wifi模块)和云平台建立起连接
What is IoT?


"物联网" 描述了一种新兴的趋势, 即大量嵌入式设备 (事物) 连接到互联网上。这些连接的设备与人和其他事物通信, 并且经常向云存储和云计算资源提供传感器数据, 在这些数据被处理和分析以获得重要的洞察力。廉价的云计算能力和更高的设备连接性使这种趋势得以实现。
大量的解决方案是建立在许多垂直应用, 如环境监测和控制, 健康监测, 车队监测, 工业监测和控制, 和家庭自动化。第一步:搭建esp8266的开发环境(想到经常用到的arduinoide,可以节省其他软件开发学习的时间)打开Arduino IDE,点击File->Preferences,如下图所示:在新打开的界面中,点击如下图红色圆圈中的按钮, 将如下链接地址复制到新弹出的对话框中:国内使用:http://git.oschina.net/dfrobot/firebeetle-esp8266/raw/master/package_firebeetle8266_index.json海外使用:https://raw.githubusercontent.com/DFRobot/FireBeetle-ESP8266/master/package_firebeetle8266_index.json点击OK
[*]更新板卡
打开Tools->Board:->Boards Manager...,如下图所示:
Boards Manager会自动更新板卡,如下图所示:更新完成后,会在列表中看到FireBeetle-ESP8266主板,点击安装:
第二步:esp8266发送http请求(如何将esp8266补做到的信号数据上传到服务器)1. HTTP相关知识    HTTP是一套计算机网络通讯规则。下来主要介绍一下HTTP消息格式        HTTP请求数据格式:    当浏览器发送请求是,向服务器发送了一个数据块,也就是请求信息,其中信息由三部分组成。    1. 请求方法 URI协议/版本    2. 请求头(Request Header)    3. 请求正文GET/sample.jspHTTP/1.1
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

username=jinqiao&password=1234
HTTP 请求应答格式:    当服务器收到浏览器的请求时,会向客户端返回数据,数据主要由三部分组成    1. 协议状态 版绷带吗描述    2. 响应头(ResponseHeader)    3. 响应正文HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112data(返回数据)
#include <ThingSpeak.h>
#include <ESP8266WiFi.h>      
//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>

#define grayscalePin D8
// Network Parameters
const char* ssid   = "DFRobot-guest";
const char* password = "dfrobot@2017";

// ThingSpeak information
char thingSpeakAddress[] = "api.thingspeak.com";
const char* server = "api.thingspeak.com";
unsigned long channelID = 541489;
char* readAPIKey = "TY5KLRMTB5E311RX";
char* writeAPIKey = "J1XHZ98DG0PGHKGW";
String apiKey = "TY5KLRMTB5E311RX";
const unsigned long postingInterval = 120L * 1000L;
unsigned int FieldLabelone= 1;                            // Field to write temperature data
unsigned long lastConnectionTime = 0;
long lastUpdateTime = 0;
WiFiClient client;
float readTSData( long TSChannel,unsigned int TSField ){
   
float data =ThingSpeak.readFloatField( TSChannel, TSField, readAPIKey );
Serial.println( " Data read from ThingSpeak: " + String( data, 9 ) );
return data;

}

// Use this function if you want to write a single field
int writeTSData( long TSChannel, unsigned int TSField, float data ){
intwriteSuccess = ThingSpeak.writeField( TSChannel, TSField, data, writeAPIKey ); // Write the data to the channel
if ( writeSuccess ){
   
    Serial.println( String(data) + " written to Thingspeak." );
    }
   
    return writeSuccess;
}

//use this function if you want multiple fields simultaneously
int write2TSData( long TSChannel, unsigned int TSField1, float field1Data, unsigned int TSField2, long field2Data, unsigned int TSField3, long field3Data ){

ThingSpeak.setField( TSField1, field1Data );
ThingSpeak.setField( TSField2, field2Data );
ThingSpeak.setField( TSField3, field3Data );
   
int writeSuccess = ThingSpeak.writeFields( TSChannel, writeAPIKey );
return writeSuccess;
}

void setup()
{
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop()
{
int val = analogRead(A0);
delay(100);
if (client.connect(server,80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr +="&field1=";
postStr += String(val);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.println(postStr);
Serial.println(val);
}
client.stop();
Serial.println("Waiting…");
// thingspeak needs minimum 15 sec delay between updates
delay(2000);
}
int connectWiFi(){
   
    while (WiFi.status() != WL_CONNECTED) {
      
      WiFi.begin( ssid, password );
      delay(2500);
      Serial.println("Connecting to WiFi");
    }
   
    Serial.println( "Connected" );
    ThingSpeak.begin( client );
}
总结: 通过 WiFiClient 的 connect 方法来进行WIFI链接 通过print方法来发送HTTP请求, 以及readStringUntil('\n') 来读取服务器端返回的数据
第一次把一端的信号传给了服务器
通过响应风车转动为“1”,响应thinghttp连接到IFTTT 发送装置响应短信提示
外部 web 服务 IFTTT 是一种 web 服务, 它允许您创建用于响应触发器操作的 applet。此示例演示如何使用响应应用程序在ThingHTTP中触发 HTTP 请求 IFTTT。触发的 IFTTT 小程序然后发送一个文本消息。通道37998创建 IFTTT 小程序可以将 IFTTT webhooks 服务设置为使用 web 请求来触发操作。传入操作是对 web 服务器的 HTTP 请求, 传出操作是文本消息。记录家庭温度值。在这个例子中, 当温度降到50度以下时, 你会收到一个文本通知, 这样春天的幼苗就不会被破坏。

[*]创建IFTTT帐户, 或登录到现有帐户。
[*]创建小程序。选择 "我的小程序", 然后单击 "新建 applet " 按钮。
[*]选择输入操作。点击这个词。


[*]选择 Webhooks 服务。在搜索字段中输入。选择Webhooks卡。Webhooks
[*]完成触发器字段。选择 Webhooks 作为触发器后, 单击 "接收 web 请求卡" 继续。输入事件名称。本示例使用事件名称。单击 "创建触发器"。TooCold
选择结果操作。单击该单词。触发器词现在是 Webhooks 图标。在搜索栏中输入 sms, 然后选择 "sms" 框。this选择 "向我发送 SMS", 然后输入文本消息信息。您可以传递有关使用配料触发消息的事件的数据。例如, 包括将事件名称添加到文本消息中。单击 "创建操作" 以完成新的小程序。{{Event                            Name}}
[*]检索您的 Webhooks 触发器信息。选择 "我的小程序 >服务", 然后搜索。选择Webhooks, 然后单击 "文档" 按钮。您将看到您的密钥和发送请求的格式。输入事件名称。此示例的事件名称为。WebhooksTooColdhttps://maker.ifttt.com/trigger/{event}/with/key/XXXXXXXXXXXXXXXXXXXXXXhttps://maker.ifttt.com/trigger/ ... XXXXXXXXXXXXXXXXXXX

您可以使用测试按钮或将 URL 粘贴到浏览器中来测试服务。IFTTT 事件触发器并非总是瞬时的。现在创建一个 ThingHTTP 来完成触发器请求。创建 ThingHTTPThingHTTP 应用程序允许您使用 API 密钥和来自 web 或设备的获取请求来触发预定义的 HTTP 请求。此示例演示如何使用 ThingHTTP 在 IFTTT 上触发 Webhooks。
[*]选择 "应用程序" > " ThingHTTP", 然后选择 "新 ThingHTTP"。
[*]编辑 ThingHTTP 设置。

[*]选择一个名称。
[*]从 Webhooks 文档中输入URL 。此示例的 URL 具有窗体 https://maker.ifttt.com/triigger ... xxxxxxxxxxxxxxxxxxx。
[*]对于方法, 请输入 "获取"。
[*]保存 ThingHTTP。现在, 根据您的通道数据创建一个响应以触发此 ThingHTTP。

创建对数据的响应反应应用程序可以评估您的 ThingSpeak 通道数据并触发其他事件。创建在房子太冷时触发的反应应用程序的实例。选择 "应用程序" > "响应", 然后单击 "新建响应"。
[*]选择一个名称。
[*]选择用于测试频率的数据插入。
[*]为条件选择温度通道。
[*]选择适当的字段, 在这种情况下, 字段1。
[*]将要求设置为小于。
[*]设置温度水平, 在本例中为50。
[*]选择ThingHTTP作为操作, 然后选择以前定义的 ThingHTTP 的名称。
[*]在"选项" 中, 选择 "每次满足条件时运行操作"。
[*]


触发您的短信一旦通道中的风车转动达到你的反应的设定点, 你就会在你的设备上收到一条短信。硬件篇:蝴蝶的拍打的动作,是左右上下往复运动。下面是电机带动2哥左右齿轮
蝶的叶片,先绘制了翅膀的大体轮廓然后3d打印出来安装接着接通一下电机的正负极 看看蝶的运动情况
安装蝶的悬空的支持,旋转0.8mm的304不锈钢丝。它本身既有刚性 同时纤细富有弹性接好支撑的钢丝后,用力弯曲一点弧度电路连接部分也很简单,一路电机驱动的和esp8266的2个IO空。分别是PMW速度接D1,电机DIR方向接D2烧录代码#include "config.h"

/************************ Example Starts Here *******************************/

// digital pin 5
#define LED_PIN D5
int DIR = D1;
int PWM = D2;
// set up the 'digital' feed
AdafruitIO_Feed *digital = io.feed("digital");

void setup() {

pinMode(LED_PIN, OUTPUT);
pinMode(DIR, OUTPUT);
// start the serial connection
Serial.begin(115200);

// wait for serial monitor to open
while(! Serial);

// connect to io.adafruit.com
Serial.print("Connecting to Adafruit IO");
io.connect();

// set up a message handler for the 'digital' feed.
// the handleMessage function (defined below)
// will be called whenever a message is
// received from adafruit io.
digital->onMessage(handleMessage);

// wait for a connection
while(io.status() < AIO_CONNECTED) {
    Serial.print(".");
    delay(500);
}

// we are connected
Serial.println();
Serial.println(io.statusText());
digital->get();

}

void loop() {

// io.run(); is required for all sketches.
// it should always be present at the top of your loop
// function. it keeps the client connected to
// io.adafruit.com, and processes any incoming data.
io.run();

}

// this function is called whenever an 'digital' feed message
// is received from Adafruit IO. it was attached to
// the 'digital' feed in the setup() function above.
void handleMessage(AdafruitIO_Data *data) {

Serial.print("received <- ");

if(data->toPinLevel() == HIGH)
    {
      Serial.println("HIGH");
      for( char i=0;i<10;i++)
      {
      digitalWrite(DIR, HIGH);      
      analogWrite(PWM, 150);
      delay(500);
      }
      digitalWrite(DIR, HIGH);      
      analogWrite(PWM, 0);
    }
else
    {
      Serial.println("LOW");
      digitalWrite(DIR, HIGH);      
      analogWrite(PWM, 0);
    }


digitalWrite(LED_PIN, data->toPinLevel());
}
底座设计篇:为了凸显蝶的空灵和想象,底座选用一个圆柱和楔形切割的结构。同时也可以为蝶的支持给一定的倾角最后将设计好的模型打印或者水泥制作出来一个不错的七夕礼物就好了最后这个装置 需要你有一个你的另一半也有一个每个工作和异地的空间和时间,都可以不受限制的将我们的小心思传达给我们的所爱之人同时也不会在纷乱的信息和工作,有所打扰它就在你的工作台书桌上记录传递思恋

王筱丰 发表于 2018-8-12 20:39:17

应该是OBLOQ哦!而不是OBLOG!

SJHll 发表于 2019-5-4 19:56:58

好厉害!好漂亮!

小马1 发表于 2019-9-5 17:31:07

有趣有趣

小马1 发表于 2019-9-5 17:34:09

大写的666,加油

DFrJnCdAk8B 发表于 2019-9-6 21:54:56

最后的效果不错

gada888 发表于 2019-9-17 08:09:53

这个牛

生活1 发表于 2020-6-1 23:00:18

请教一下,那个风车转动然后ESP8266是通过什么方式检测到的呢?

生活1 发表于 2020-6-2 20:15:36

厉害啊!

派大星ym 发表于 2022-8-4 10:10:13

真漂亮 送女朋友在也不是直男礼物了

派大星ym 发表于 2022-8-4 10:21:13

{:6_213:}////

大哥哥 发表于 2022-8-14 21:48:06

好厉害 支持

发表于 2022-9-13 16:41:04

好创意!

SBI y 发表于 2022-11-5 12:55:01

怎么能如此诗意呢?
页: [1]
查看完整版本: 七夕-I‘m with you 物联网装置