arduino 用哪个物联网云平台平台

微信+web服务器+arduino的物联网平台_Arduino入门与进阶
微信+web服务器+arduino的物联网平台
作者:PLC工程师
微信+web服务器+arduino的物联网平台
项目介绍:
用Arduino控制物联网的方案很多,被控端和控制端的连接方式也有很多,比如蓝牙,Wifi,433Mhz模块;如果涉及到互联网和手机的远程控制,也有一些成熟的业界方案,比较普遍的是一些物联网公司比如智能插座,一个公司专门推出一个专门的App,每个App都长得各种各样,有些操作方便,有些麻烦。
当我有一天看到有人用微博控制Arduino的时候,感觉相当酷炫,但是微博控制的方便性和安全性是不高的,同时微信却有极高的安全性,对于每天使用微信的人来说,操作显然是最方便的。
整个项目的开发,主要是软件层面,因为控制实现以后,只要把点亮LED的代码改成别的,就可以控制另外的设备了,成功之后才发现,需要的技能其实不少:
Linux,Arduino,PHP,微信公众平台开发,MySQL
换句话说,只要修改相应的代码,其他有关物联网远程控制或数据获取都可以接入本项目,使得操作更加方便
代码全在Github。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
整个原理是不难理解的。
控制Arduino
首先服务器上有一个数据库,数据库里面有几个记录,每个开关都有一个对应的值。
在微信中,我们对一个公众平台发送类似于&开灯&,&打开热水器&之类的命令,以&开灯&为例公众平台的后台服务器会对这个命令进行判断,如果符合预设的命令,就会进入数据库,找到这个LED对应的记录,把这个记录对应的值改为&1&(值其实是随意的)。
& && &&&这里的命令发送方式包括文字消息,语音消息。
与此同时,Arduino通过W5100扩展板,不断向一个服务器上的页面发送请求,请求中会包含一些诸如请求的开关ID,密码等参数,服务器核实后,就会进入数据库,找到对应的开关的记录,把对应的值&1&反馈给Arduino,Arduino收到反馈后,就会进行判断,如果是&1&,就把对应引脚上的LED点亮。如果是&0&,就把它熄灭。& && && && && && && && &Arduino的这个过程是不断的进行的,但由于网络和性能问题,通常会有几秒钟的延迟。
Arduino提交物联网数据
这次首先是Arduino通过一些连接方式,接收到物联网的相关数据,比如温度值&26&,然后向服务器上的一个页面提交请求,请求中包括传感器ID,密码,提交的数据等参数,服务器核实后,就会进入数据库,把传递上来的值,写入相应的传感器记录。& && && & 这个过程也是不断的进行的。
而用户需要这些数据的时候,就可以通过微信发送命令,比如&卧室温度&,后台服务器判断后,就会进入数据库,找到相应的传感器记录,提取温度值,编入预设的反馈消息格式比如&报告主人,卧室温度为26℃。
--------------------------------------------------------------------------鉴于许多朋友可能认为本项目难以上手,所以详细的记录了一遍部属的过程
首先是服务器和微信端,
服务器端选择新浪云,毕竟这是不买VPS的一种比较好的方案,如果有自己的服务器,那么看了代码就懂了,也就不用看服务器端的部署了:)。
,注册并登录,应该有免费云豆吧。
在管理页面选择创建新应用。
数据可以这么填,有些空会影响后面的过程
进入该应用的管理页面,并选择左边的代码管理
粘贴下面的代码,注意修改代码,有些值后面会看到
if ($_GET['data'] && ($_GET['token'] == &doubleq&)) {//可以改token,这相当于密码,在Arduino端改成相应的值即可
$con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$data = $_GET['data'];
mysql_select_db(&app_ulink42&, $con);//要改成相应的数据库名
$result = mysql_query(&SELECT * FROM switch&);
while($arr = mysql_fetch_array($result)){//找到需要的数据的记录,并读出状态值
if ($arr['ID'] == 1) {
$state = $arr['state'];
$dati = date(&h:i:sa&);//获取时间
$sql =&UPDATE sensor SET timestamp='$dati',data = '$data'
WHERE ID = '1'&;//更新相应的传感器的值
if(!mysql_query($sql,$con)){
die('Error: ' . mysql_error());//如果出错,显示错误
mysql_close($con);
echo &{&.$state.&}&;//返回状态值,加&{&是为了帮助Arduino确定数据的位置
echo &Permission Denied&;//请求中没有type或data或token或token错误时,显示Permission Denied
同样地,把index.php改掉
//错误日志
function echo_server_log($log){
file_put_contents(&log.txt&, $log, FILE_APPEND);
//定义TOKEN
define ( &TOKEN&, &ulink& );
//验证微信公众平台签名
function checkSignature() {
$signature = $_GET ['signature'];
$nonce = $_GET ['nonce'];
$timestamp = $_GET ['timestamp'];
$tmpArr = array ($nonce, $timestamp, TOKEN );
sort ( $tmpArr );
$tmpStr = implode ( $tmpArr );
$tmpStr = sha1 ( $tmpStr );
if ($tmpStr == $signature) {
if(false == checkSignature()) {
//接入时验证接口
$echostr = $_GET ['echostr'];
if($echostr) {
//获取POST数据
function getPostData() {
$data = $GLOBALS['HTTP_RAW_POST_DATA'];
$PostData = getPostData();
if(!$PostData){
echo_server_log(&wrong input! PostData is NULL&);
echo &wrong input!&;
$xmlObj = simplexml_load_string($PostData, 'SimpleXMLElement', LIBXML_NOCDATA);
if(!$xmlObj) {
echo_server_log(&wrong input! xmlObj is NULL\n&);
echo &wrong input!&;
$fromUserName = $xmlObj-&FromUserN
$toUserName = $xmlObj-&ToUserN
$msgType = $xmlObj-&MsgT
if($msgType == 'voice') {//判断是否为语音
$content = $xmlObj-&R
}elseif($msgType == 'text'){
$content = $xmlObj-&C
$retMsg = '只支持文本和语音消息';
if (strstr($content, &温度&)) {
$con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
mysql_select_db(&app_ulink42&, $con);//修改数据库名
$result = mysql_query(&SELECT * FROM sensor&);
while($arr = mysql_fetch_array($result)){
if ($arr['ID'] == 1) {
$tempr = $arr['data'];
mysql_close($con);
$retMsg = &报告大王:&.&\n&.&主人房间的室温为&.$tempr.&℃,感谢您对主人的关心&;
}else if (strstr($content, &开灯&)) {
$con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dati = date(&h:i:sa&);
mysql_select_db(&app_ulink42&, $con);//修改数据库名
$sql =&UPDATE switch SET timestamp='$dati',state = '1'
WHERE ID = '1'&;//修改开关状态值
if(!mysql_query($sql,$con)){
die('Error: ' . mysql_error());
mysql_close($con);
$retMsg = &好的主人&;
}else if (strstr($content, &关灯&)) {
$con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dati = date(&h:i:sa&);
mysql_select_db(&app_ulink42&, $con);//修改数据库名
$sql =&UPDATE switch SET timestamp='$dati',state = '0'
WHERE ID = '1'&;//修改开关状态值
if(!mysql_query($sql,$con)){
die('Error: ' . mysql_error());
mysql_close($con);
$retMsg = &好的主人&;
$retMsg = &暂时不支持该命令&;
$retTmp = &&xml&
&ToUserName&&![CDATA[%s]]&&/ToUserName&
&FromUserName&&![CDATA[%s]]&&/FromUserName&
&CreateTime&%s&/CreateTime&
&MsgType&&![CDATA[text]]&&/MsgType&
&Content&&![CDATA[%s]]&&/Content&
&FuncFlag&0&/FuncFlag&
$resultStr = sprintf($retTmp, $fromUserName, $toUserName, time(), $retMsg);
//反馈到微信服务器
echo $resultS
回到应用管理页面,选择左边的MySQL,单击初始化
新建数据表
同样的方法,建立一个名字为sensor字段数为3的数据表
分别插入一条记录
然后进入,
申请测试号,填写相应配置
这时候可以用手机端进行测试了,可以发送包含&温度&,&关灯&,&开灯&的文字消息,或者语音消息,都会有相应的反馈。
还有Arduino端在下面的代码中,我把一个LED接在D7上,用于显示控制的效果,一个DS18B20接在D2上,用来显示上传传感器数据的效果。
#include &OneWire.h&
#include &DallasTemperature.h&
#include &SPI.h&
#include &Ethernet.h&
char state = '0';
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192,168,0,177);
IPAddress myDns(192,168,0,1);
char server[] = &1.&;
int sensrdata = 0;
unsigned long lastConnectionTime = 0;
boolean lastConnected =
const unsigned long postingInterval = 200*1000;
// 定义DS18B20数据口连接arduino的2号IO上
#define ONE_WIRE_BUS 2
// 初始连接在单总线上的单总线设备
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(){
// 设置串口通信波特率
Serial.begin(9600);
delay(1000);
Ethernet.begin(mac, ip, myDns);
Serial.print(&My IP address: &);
Serial.println(Ethernet.localIP());
pinMode(7, OUTPUT);
sensors.begin();
void loop(void){
sensors.requestTemperatures();
sensrdata = sensors.getTempCByIndex(0);
if(state == '0'){
digitalWrite(7, LOW);
}else if(state == '1'){
digitalWrite(7, HIGH);
while(client.available()) {
c = client.read();
if (c == '{'){
state = client.read();
if (!client.connected() && lastConnected) {
Serial.println(&disconnecting.&);
client.stop();
if(!client.connected() && (millis() - lastConnectionTime & postingInterval)) {
if (client.connect(server, 80)) {
// send the HTTP PUT request:
client.print(&GET /downup.php?token=doubleq&data=&);
client.print(sensrdata);
client.println(& HTTP/1.1&);
client.println(&Host: 1.&);
client.println(&User-Agent: arduino-ethernet&);
client.println(&Connection: close&);
client.println();
lastConnectionTime = millis();
Serial.println(&connection failed&);
Serial.println(&disconnecting.&);
client.stop();
lastConnected = client.connected();
由于这是一个物联网平台,所以只要是可以发起HTTP请求的,都可以接入。
一个比较合理的方案是,树莓派或PCduino做连接互联网的主要控制器,通过XBee,433Mhz等无线方式来控制小型的Arduino节点,再由Arduino来控制物联网终端,当然,如果你不介意网络扩展板的价格,每个Arduino直接联网也是可以的。
使用Python,requests库,用更强的性能,可以实现更加更快速的反应。
如果有自己的服务器,也可以用自己的服务器进行,可以不受第三方平台的制约。注意:php部分的代码必须为UTF-8,否则可能导致微信token验证失败!
如需更详细资料,如有好资源分享,请加入QQ交流群:
欢迎阅读,欢迎转载,不用注明出处!本站只提供入门和进阶资料,做您学习的小伙伴!老司机也欢迎光临指导!有好内容请加群: 不要看声明了,看内容吧!
arduino W5100 PHPServer 微信 远程监控 更新
自动化世界公众号1818人阅读
物联网(IoT)(7)
Arduino(6)
Arduino 的开源、开放、廉价、简单、跨平台等特点使其快速发展起来,成为学习微控制器的首选,成为物联网(IoT)开发的重要组成部分,通过Arduino我们可以从各种传感器感知世界,也可以控制各种执行器执行与世界的交互。什么是Arduino?Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti。它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。Arduino怎么读?音标:arduino /a:(r)d∧in?u/音译名称有很多:阿对诺,阿都伊诺,阿尔杜伊诺,阿尔迪诺(意为:勇敢的朋友);在几个Arduino的开发群中问发音这个问题,发现大家并不关注它的发音,也没有统一的意见;个人觉得按英文的发音规则“阿都伊诺”相对准确,而我个人更喜欢“阿尔迪诺”这个名称;基于Arduino能做什么?三D打印机,激光雕刻机,遥控汽车,遥控飞机,机器人,能做什么不重要,重要的是你能想到什么!Arduino的特色跨平台Arduino IDE可以在Windows、Macintosh OS X、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。简单清晰Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 avr-gcc库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。可以使用USB接口直接供电,也可以使用5V直流输入电源。支持多样的交互程序(如:Flash,Max/Msp,VVVV,PD,C,Processing)等。开放性Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。发展迅速Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。廉价相比其他微控制器平台的Arduino板是相对便宜的。Arduino的模块的最便宜的版本可以自己动手装配。使用廉价的微处理控制器(ATMega8/168/328),只需要十几块二十几块就能买到一块开发板。对于入门尝试的开发者来说,不需要付出很高的成本。在物联网(IoT)开发中的位置如下图,在全自建物联网系统中,通过连接到Arduino开发板上的传感器来收集温度和湿度信息,然后上传到Web应用保存到数据库中;基于收集温度和湿度信息,生成智能分析建议,比如穿衣指数,防晒指数之类的。Arduino不只可以连接传感器,还可以连接执行器,控制器;例如:一个Arduino智能孵化器,需要将孵化器的温湿度控制在合理的范围:& & & & 孵化鹌鹑蛋:温度控制在37.2℃~38.5℃范围,湿度控制在54%~70%范围;& & & & 孵化鸡蛋和鸭蛋:温度控制在37℃~38℃范围,湿度控制在40%~70%范围。
需要通风,通风是为了提供足够的氧气,防止二氧化碳浓度过高。& & & & 孵化过程中需要翻蛋,翻蛋的主要目的是改变胚胎方位,防止粘连,一般每天翻蛋至少6-8次。& & & & 鹌鹑的孵化期一般为16~17天,鸡的孵化期为21天,鸭的孵化期为28天。就可以基于Arduino通过温湿度传感器进行温湿度的监控,通过陶瓷加热灯进行加热,通过风扇进行通风,通过舵机进行翻蛋,通过显示屏显示温湿度等状态,还可以用LED灯进行照明。Arduino的历史Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,该酒吧是以1000年前意大利国王Arduin的名字命名的。为了纪念这个地方,他将这块电路板命名为Arduino。随后Banzi、Cuartielles和Mellis把设计图放到了网上。版权法可以监管开源软件,却很难用在硬件上,为了保持设计的开放源码理念,他们决定采用Creative Commons(CC)的授权方式公开硬件设计图。在这样的授权下.任何人都可以生产电路板的复制品,甚至还能重新设计和销售原设计的复制品。人们不需要支付任何费用,甚至不用取得Arduino团队的许可。然而,如果重新发布了引用设计,就必须声明原始Arduino团队的贡献。如果修改了电路板,则最新设计必须使用相同或类似的Creative Commons(CC)的授权方式,以保证新版本的Arduino电路板也会一样是自由和开放的。唯一被保留的只有Arduino这个名字,它被注册成了商标,在没有官方授权的情况下不能使用它。Arduino发展至今,已经有了多种型号及众多衍生控制器推出。硬件组成主板Arduino的型号有很多,如Arduino UnoArduino NanoArduino LilyPadArduino Mega 2560Arduino EthernetArduino DueArduino LeonardoArduinoYún扩展板Arduino的扩展板很多,如Arduino GSM ShieldArduino Ethernet ShieldArduino WiFi ShieldArduino Wireless SD ShieldArduino USB Host ShieldArduino Motor ShieldArduino Wireless Proto ShieldArduino Proto ShieldArduino IDE常见Arduino版本参数注:表中只列出了Arduino的部分版本,更多请参见:版权与付费为了保持设计的开放源码理念,因为版权法可以监管开源软件,却很难用在硬件上,Arduino决定采用Creative Commons许可。 Creative Commons(CC)是为保护开放版权行为而出现的类似GPL的一种许可(license)。在Creative Commons许可下,任何人都被允许生产电路板的复制品,还能重新设计,甚至销售原设计的复制品。你不需要付版税,甚至不用取得Arduino团队的许可。然而,如果你重新发布了引用设计,你必须说明原始Arduino团队的贡献。如果你调整或改动了电路板,你的最新设计必须使用相同或类似的 Creative Commons许可,以保证新版本的Arduino电路板也会一样的自由和开放。唯一被保留的只有Arduino这个名字。它被注册成了商标。如果有人想用这个名字卖电路板,那他们必须付一点商标费用给Arduino的核心开发团队成员。相关学习网站理论上带广告的链接都不应该贴,但对一种技术、产品的使用学习分享又何尝不是一种广告呢!结束语这里对Arduino进行了一个简单的介绍,了解Arduino是什么以及可以用它来做什么,并且了解它在物联网(IoT)开发中的位置。通过本文,相信你已经知道自己是否需要学习它了!上一篇:【物联网(IoT)开发】物联网简介下一篇:===========文档信息============&版权声明:非商用自由转载-保持署名-注明出处&署名(BY) :testcs_dn(微wx笑)&文章出处:[无知人生,记录点滴](http://blog.csdn.net/testcs_dn)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4988076次
积分:45590
积分:45590
排名:第55名
原创:670篇
转载:191篇
译文:21篇
评论:1170条
文章:129篇
阅读:1291589
文章:33篇
阅读:157697
文章:16篇
阅读:109898
阅读:8528
文章:29篇
阅读:262162
文章:18篇
阅读:215210
文章:44篇
阅读:287157
(21)(20)(17)(4)(16)(12)(17)(25)(34)(19)(15)(17)(15)(23)(12)(12)(14)(13)(14)(20)(58)(25)(31)(16)(33)(31)(20)(24)(23)(21)(20)(14)(36)(14)(14)(7)(6)(15)(3)(2)(9)(6)(7)(32)(3)(8)(7)(22)(2)(30)(4)工具类服务
编辑部专用服务
作者专用服务
基于Arduino的物联网接入器的研究与实现
物联网是当今时代信息技术的重要组成部分,物联网产业也已经成为促进世界经济发展的重要新兴产业。物联网接入器作为物联网应用中的一个关键设备,其作用是将感知系统中采集到的物联网数据,经互联网或移动通信网络等网络系统,传输至物联网应用层的数据中心。物联网接入器承担着物联网数据的采集、处理和发送等多种功能,所以它涉及到多种技术,是多种技术的融合。  在目前的物联网接入器相关类似研究中,大多数是针对某种或某几种特定行业设计的,存在着接入功能单一、适应性差等问题,不能满足多种物联网设备的接入需求,也适应不了复杂多变的网络环境。  本文提出的基于Arduino的物联网接入器,是在近几年兴起的Arduino平台和技术的基础上,研发的一种可以满足物联网设备广泛接入、多种网络传输方式灵活选择的新型系统,有力地验证了Arduino平台的技术特点,以及在物联网领域的实用性。本文的工作内容如下:  (1)物联网接入器的系统设计。首先,在对物联网接入器进行描述的基础上,总结了物联网接入器应该具备的特征,并准确地定义了物联网接入器的功能;然后,对物联网接入器进行了层次划分;最后,完成了物联网接入器的硬件结构设计和软件结构设计。  (2)物联网接入器的软硬件系统实现。在硬件系统中,选用Intel GalileoGEN2为核心开发板,扩展了RS232接口、3G传输等模块,并结合必要的信息采集模块、通信模块、转换线等,组成了物联网接入器的硬件系统,其丰富的数据接口和多种网络传输方式可支持多种物联网设备的轻便接入,并提高了网络环境的适应性;在软件系统中,完成了USB摄像头的驱动在Linux内核中的配置,进行了Linux操作系统的剪裁、编译与移植,并且在PC虚拟机中搭建了针对物联网接入器硬件系统的交叉编译环境。  (3)物联网接入器的接入功能实现。基于Arduino的物联网接入器实现了传感器数据和视频数据等多种数据类型的接入。在传感器数据的接入功能实现中,物联网接入器可将温度传感器采集到的温度信息实时传输至Yeelink物联网平台;在视频数据的接入功能实现中,物联网接入器利用MJPG-streamer流媒体方案,将USB摄像头采集的视频信息实时传输至物联网应用层的数据中心。
学科专业:
授予学位:
学位授予单位:
导师姓名:
学位年度:
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社基于Arduino物联网的实验教学探索_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。
基于Arduino物联网的实验教学探索
||暂无简介
北京龙源网通电子商务有限公司|
总评分0.0|
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 arduino物联网资料 的文章

 

随机推荐