上篇“ 【物联网(IoT)开发】Arduino 入门 Hello World(LED闪烁) ”只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断开网络提供电源依然还可以工作。本文将介绍如何开发一个应用程序,以便使用适用于物联网 (Internet of Things, IoT) 的技术。我们的应用程序通过串口收集数据,将其存储在一个 Web 服务器上,然后在网页上实时显式结果,并可以在网页上控制LED的开关。
构建一个类似的应用程序的前提条件 对于第 1 部分,您需要:一个 Bluemix 帐户,您还没有? 点击 这里注册 ,已经有,点击 这里登录 ;
对 HTML( 超文本标记语言 )的基本了解;对CSS (层叠样式表)的基本了解;
对javascript(一种直译式脚本语言)的基本了解;
对python 编程的基本了解;
对 mysql数据库及管理工具 的基本了解;
对SQL语言的基本了解;
对于第 2 部分,您需要:
一个Arduino NANO 或其他兼容Arduino 的主板
可选:Arduino Ethernet Shield
一个LED灯(发光二极管)
一些母母跳线(female-female jumper wire)
Python 2.7.x
我提供了所有必要代码,但对这些技术的基本了解有助于您理解有关的细节,但不是必须如此。
也无需拥有使用 Arduino 或任何其他类型的微型控制器主板的经验。
步骤 1. 创建您的Python应用程序 1、在 Bluemix 用户界面中,转至“ 仪表板 ”。
2、单击 创建应用程序 。

3、单击 Web ,然后按照指导经验来选择入门模板,指定名称以及选择编码方式。

输入应用程序名称

应用程序名称是唯一的,接下来要通过它做为二级域名来访问你的应用! 点击完成之后,需要等待一会儿,然后可以看到下图的界面

这时就可以访问你刚刚创建的应用了。如下图:

步骤 2. 添加数据库服务 可以通过单击 Bluemix 用户界面中应用程序“ 概述 ”上的 添加服务或 API ,将服务添加到应用程序中。也可以使用 cf 命令行界面。请参阅 处理应用程序的可用选项 。

在服务列表中选择数据库( ClearDB MySQL Database )

您可以指定服务的名称,也可以使用默认的;

如果你事先已经创建了数据库服务,也可以直接绑定:

获取服务信息
进入自己的应用程序》概述页面,找到已经添加的服务,点击“显示凭证”,可以查看服务的具体信息:

拿到凭证,我们就可以通过MySQL的客户端管理工具来连接管理数据库了: 1、连接数据库
如果你还没有安装Navicat for MySQL管理工具,请参考: MySQL学习(二)图形界面管理工具Navicat for MySQL安装和使用

2、创建数据表
注意:我们是没有权限创建数据库的,只能用默认创建好的;
只需要创建一张非常简单的表,来保存状态和控制命令
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `led_status` -- ---------------------------- DROP TABLE IF EXISTS `led_status`; CREATE TABLE `led_status` ( `id` bigint(20) NOT NULL, `status` varchar(10) DEFAULT NULL, `control` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of led_status -- ---------------------------- INSERT INTO `led_status` VALUES ('1', '0', '0');
步骤 3. 准备开发环境及硬件环境有关开发环境搭建的细节,请参考下面的文章:
《Python入门》windows 7下Python Web开发环境搭建笔记
《Python入门》第一个Python Web程序――简单的Web服务器
《Python入门》linux 下 Python Web开发环境搭建笔记【物联网(IoT)开发】Arduino IDE(集成开发环境)下载及安装
【物联网(IoT)开发】Arduino NANO,UNO 驱动安装
本文使用的硬件环境非常简单,请参考:
【物联网(IoT)开发】Arduino 入门 Hello World(LED闪烁)
步骤 4.编写代码 1、下载初始Hello World示例代码你可以下载入门示例参考,也可以完全自己写!
进入您的应用程序,点击左侧的开始编码,在右侧点击“下载入门模板代码”。

也可以通过添加Git来下载代码。
2、使其在本地运行1、将下载的入门模板代码解压到一个目录,打开命令行窗口,切换到这个目录下

可以看出代码结构是很简单的;
2、执行命令:python server.py
3、在浏览器中访问:http://localhost:8000/
3、编写代码 本文涉及到三部分代码1)、烧录到Arduino开发板上的代码,用于接收串口的命令控制LED状态,并实时输出LED的状态
String blink_flag = "1"; // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output. pinMode(2, OUTPUT); Serial.begin(9600); } // the loop function runs over and over again forever void loop() { String rx_buffer; rx_buffer=Serial.readString(); if (rx_buffer.length() == 1){ blink_flag = rx_buffer; } if (blink_flag.compareTo("1")){ digitalWrite(2, LOW); // turn the LED on (HIGH is the voltage level) //delay(1000); // wait for a second }else{ digitalWrite(2, HIGH); // turn the LED off by making the voltage LOW //delay(1000); // wait for a second } Serial.print(","); Serial.print(blink_flag); delay(100); }2)、运行在本地计算机用于收集LED状态上传到Bluemix云平台上和从Bluemix云平台上接收命令并将控制命令通过串口发送给Anduino
文件:sendSamples.py
import serial, httplib import os #Python的标准库中的os模块包含普遍的操作系统功能 import re #引入正则表达式对象 import urllib #用于对URL进行编解码 import sys #提供了许多函数和变量来处理 Python 运行时环境的不同部分. # 调试函数,用于输出对象的属性及属性值 def getAllAttrs(obj): strAttrs = '' for o in dir(obj): strAttrs = strAttrs + o + ' := ' + str(getattr(obj, o)) + '\r\n' return strAttrs; # Sends the reading to the webserver using a POST request def sendRequest(reading): headers = {"Content-type": "application/x-www-form-urlencoded"} conn = httplib.HTTPConnection("localhost:8000") conn.request("POST", "/ledsave", "id="+reading, headers) response = conn.getresponse() print response.status, response.reason data = response.read() conn.close() # Creates an array of numbers based on the s