完美图解物联网iot实操_第1页
完美图解物联网iot实操_第2页
完美图解物联网iot实操_第3页
完美图解物联网iot实操_第4页
完美图解物联网iot实操_第5页
已阅读5页,还剩233页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 0无所不在的物联网装置 物联网(Internet of Things,IoT)一词,是由美国麻省理工学院 Auto-ID 中心主任 Kevin Ashton 于 1999 年进行 RFID 研究时所提出的概念。物联网是指为每个东西, 包括一般物品(例如 :超市以及它所销售的所有商品)、传感器甚至人类和动物,都标上0唯一识别码(unique identifiers,如 :条形码、IP 地址、之间通过约定好的通信协议,利用互联网相连、分享数据。 号码),彼此 物联网不仅只是两个装置之间的互相连接,它们通常也连接到负责收集资料,以及协调这些装置运作的(云)服务器。此外,控制器、传感器等物联网装置,

2、通常也 都要具备让用户操作和监控的界面,无论是网页或者 App 形式。物联网的基本架构如下。可连接互联网设备的数量,在 2011 年时已超过地球总人口数。这些装置包含消费性电子产品、工厂机器设备、家电、医疗器材、传感器,等等。以往,资料通过人力输入到计算机(例如,抄录水电、煤气用量),现在多半则是由装置直接给另一个装置提供数据。 举例来说,你的手机认得“你”和“家人”,当你的小孩抵达校园时,“学校”会自动发送短信 ;手机可以记录你的运动习惯并协调智能型温控器,在你到家之前2 调整好室温 :若是下班快抵达家门时,手机可以自动过滤公司电话,并住家的房子无所不在的物联网装置自动打开车库门。快递的货车

3、可实时更新网购商品的位置和预计送达的时间,也能 了解送货路线的交通状况,并适时提醒或规划避开车流量大的路线。 加上传感器、通信芯片和单片机技术的提升与价格下滑,使得“物联网”从概念融入 了真实的日常生活。 0.1 MPU, MCU与SoC介绍处理器芯片依照功能来区分,大致分成如下三种类型。MCU :全名是 Microprocessor Unit(微处理器),其实就是 CPU(中央处理器),可 运行命令、进行运算和逻辑处理。 MPU :全名是 Microcontroller Unit(单片机),把微处理器(MCU)、快闪存储器和主存储器(内存)包在同一个芯片里,相当于一台微型计算机,耗电量低,但

4、是处理器的性能不高(时钟频率在 200MHz 以内),而且存储器容量不大(以 KB 为单位)。 当今的 MPU 通常也会集成模拟和数字转换器(模数转换)、USB 和其他外围界面控 制器。Arduino UNO 公司的 ATmega328 芯片属于 MPU。 SoC :全称为 System on a Chip(系统芯片),集成微处理器和特定功能,例如,图像处理节(显示卡)、Wi-Fi 网络、蓝牙、音效处理,等等。智能手机以及某些个人 计算机的处理器,都属于 SoC。采用这类处理器的装置,通常需要较高速的运算性 3 能(时钟频率达数百 MHz 至数 GHz)以及较大的存储器容量(单位是 MB 或

5、GB),所以 存储器不在同一个芯片上,耗电量也较大。 0树莓派(一款基于 Linux 系统的单片机)的处理器芯片属于 SoC。就功能而言, SoC 大于 MCU。 对穿戴式设备应用来说,MCU 足以胜任普通数字手环所需,而且能长时间运作 ; 具备多媒体功能的智能手表,就必须采用 SoC。某些智能手表甚至同时搭载 SoC 和MCU,前者处理复杂的多媒体运算,后者用于连接传感器以及电源管理。 本书采用的硬件装置本书的示例采用下列控制平台和装置。4 Android 手机 :采用 HTML 和 JavaScript 技术,并用来开发手机 App。第 2 章将介绍使用开源的 Cordova (Phone

6、Gap),通过 JavaScript 开发手机 App,并制作蓝牙遥控应用。 无所不在的物联网装置Espruino 控制板 :这是一款采用 32 位 ARM 微控制器(STM32 系列), 固件内建 JavaScript 解释器(Interpreter,也就是运行 JavaScript 语言的软件)的开源微控制板。Espruino 官方目前推出两种控制板,一种是尺寸约为 Arduino UNO 2/3 大小的 Espruino (也称为 Espruino Original),另一种是约为成人拇指大小的 Espruino Pico。 由于它的固件是开源的,所以只要处理器兼容,即使不是 Espru

7、ino 官方推出的产品,也能够烧录 Espruino 固件,运行 JavaScript 程序。第 6 章将说明如何挑选以及烧 录 Espruino 兼容的微控制板。 5 ESP8266 控制板:采用中国地区乐鑫公司推出的 Wi-Fi 与 32 位系统芯片(SoC),控制板有不同的尺寸大小以及 I/O 脚数量可供选择。下图显示是最基本的 ESP-01 型, 此控制板约为成人拇指大小,并且预先烧录“Wi-Fi 转 TTL 串口通信”固件。因其价格 低廉(约 35 美元),所以一经推出,就受到创客圈的追捧。 0实际上,ESP8266 的处理性能高于 Arduino UNO,只拿它来当作 Wi-Fi

8、无线配适器, 真是大材小用。许多程序员为此芯片定制了多种开源固件,其中的一种能让我们通过Arduino 集成编辑器(IDE)以及 Arduino 的 C 语言来开发程序,所以它能独立运作, 甚至能取代部分 Arduino 控制板。 也有开发人员和厂商推出适用于 ESP8266 控制板的 JavaScript 解释器,相关介绍 与固件烧录说明,请参阅第 6 章。 0.2 章节导读第 1 章 Espruino 控制板简介 :介绍采用 JavaScript 作为“母语”的 Espruino 开源控制板以及如何自行烧录一个兼容的 Espruino 板,并且通过超声波 LED 灯光强弱控制、蓝牙 H 桥

9、电机控制、SD 内存卡温湿度记录器、深层睡眠省电模式等 DIY 实操练习, 认识 Espruino 控制板的数字和仿真 I/O 脚的接线和控制方式。 6 第 2 章 开发移动设备 App :Cordova 的 Cordova 是一款免费、开源的工具软件, 它让开发者使用 HTML 和 JavaScript 来开发手机和平板的 App。本章将说明 Cordova 与Android 系统的开发环境与相关软件的安装、App 程序基本架构,以及如何使用 jQuery Mobile 创建 App 操作界面和创建通过手机网络(Wi-Fi)操控微控制板的App。 无所不在的物联网装置第 3 章 制作 Cor

10、dova 蓝牙手机遥控 App :讲解如何通过 Cordova 的蓝牙、加速度传感器和串口通信等插件,制作手机蓝牙遥控机器人的 App,以及用手机的加速度传感器控制舵机云台。 第 4 章 ESP8266 物联网应用入门 :介绍 ESP8266 微控制器的 I/O 脚, 连接Arduino 控制板,提供 Arduino 控制板 Wi-Fi 无线通信的功能,并且说明如何为它烧录Arduino 固件,以及用 Arduino 的 C 语言操控 ESP8266。 第 5 章 零配置网络与 ESP8266 文件系统 :本章将说明如何为局域网里的 ESP8266 控制板设置唯一的域名,并且在 ESP8266

11、 的闪存中存储网页文件( 如 :HTML 和JavaScript)。 第 6 章 ESP8266 物联网实操 :介绍如何为 ESP 模块设置区域网络的域名、为ESP-01 模块烧录 Arduino 代码、通过网络更新 ESP 模块的固件、连接 OLED 显示屏, 以及通过 Espruino(JavaScript 代码)控制 ESP8266。 7 1Espruino控制板简介 Espruino 控制板(/)是英国的 Gordon Williams 先生开发 的开源软 / 硬件微控制板,它最大的特色是采用 JavaScript 当作控制板的母语。 Esp

12、ruino 控制板采用欧洲意法半导体公司(STMicroelectronics,ST) 制造的STM32 系列微控制器(STM32F103RCT6,32 位 72MHz ARM Cortex M3 微控制器, 以下简称 STM32 微控制器),其性能比不上同样采用 ARM 核心晶片的 Arduino DUE,但 STM32 的价格,跟 Arduino UNO 的 ATmega328 相差无几,性能却高出很多。 1截至 2015 年年底,Espruino 硬件有三个官方版本 :Original Espruino(初版,简称 Espruino, 定价 39.95 美元)、Espruino Pico

13、( 迷你版, 简称 Pico, 定价 24.95 美元)以及 Espruino Wi-Fi(主板上多了一个充当 Wi-Fi 网卡的 ESP8266),初版的尺寸约为 Arduino UNO(定价 24.95 美元)的一半,正面有三个 LED、两个按钮,背后有一 个 Micro USB 插座,用于连接 Espruino 开发软件和上传代码。 Pico 则为普通 U 盘大小,电路板的一端做成 USB 接头形式,不仅能用于串口通信、烧录程序,也支持 USB HID(Human Interface Device,人机界面设备)模式,可用程 序设置成鼠标、键盘或摇杆等输入设备。 10 因为造型迷你, P

14、ico 的 IO 脚数量只有初版的一半, 但是 Pico 板采用的 ARM Cortex M4 处理器的性能高于初版的 ARM Cortex M3 ;内置的闪存和内存容量也大于初版。如果想要尝试其他编程语言,可以为它烧录 eLua 或 MicroPython 固件。Pico 的详 细技术规格、接脚和程序示例,请参阅官方产品说明页(/Pico)。 E E E E E本书的示例皆采用 Espruino 初版以及兼容的 STM32 微控制板,为 STM32 微控制器 板烧入 Espruino 固件的说明,请参阅本章 1.4 节的“STM32 微控制器兼容板”。 STM32 微

15、控制器和 Espruino 控制板引脚简介STM32 微控制器的主要规格如下,除了 Espruino 控制板,它也被其他品牌的控制板采用,像 OLIMEXINO-STM32、LeafLabs Maple 以及意法半导体公司自家的 STM32 Discovery。 yy y内存 :内置 256KB 闪存、48KB 内存。 通信介面 :3 个串口(USART)、1 个 USB、2 个 SPI、2 个 I2C、1 个 CAN。 数字和模拟转换器 :16 个 ADC(模拟数字转换器,也就是“模拟输入引脚”)、26 个 PWM(仿真模拟输出)和 2 个 DAC(数字模拟转换器)。 内置 RTC(Real

16、-Time Clock,实时时钟):相当于安装在微控制器里的时钟,可供程序查找日期与时间。Arduino 和 Raspberry Pi 不内置 RTC,需要使用外部时钟模块(如 :DS3231 芯片)。 芯片内置温度传感器,可监测处理器的温度。 yyEspruino 采用的这一款 STM32 微控制器有 64 个引脚,其中 51 个是I/O 脚,分成 A, B, C, D 端口,每个 I/O 引脚编号前面都会标上端口字母,如 :A0, A1, B0, C3,,有些文档还会再加上“P”(代表端口,Port),如 :PA1, PA1, PB0, ,接线时,不用在意引脚是哪个端口,可以混合使用(但通

17、常不同时使用相同编号的引脚,如 :A1 和 B1、A2 和 B2,,参阅下面的 setWatch 命令说明)。 11EEEEEEEE 1引脚的标示说明 :串口端口 - 串行端口就像 Arduino UNO 的 ATmega328 微控制器,大部分引脚都具有多重功能。微控制 器本身采用 3.3V 电源,除了上图中标示的 3.3V 脚之外,多数引脚都容许输入 5V。 CAN 是 Controller Area Network(控制器局域网路)通信协议的简称,普遍用于工厂和汽车等干扰较多的场所,Expruino 目前并不支持 CAN 通信协议。 某些引脚有特殊用途,很少挪作它用,接线时请避开它们。例

18、如 OSC 与处理器晶振的引脚相连,“OSC RTC”则是内部时钟的晶振引脚,Espruino 没有接此晶振,但许多 STM32 控制板都接。 Espruino 没有引出 BOOT0(参阅下文)以及底下的微控制器接脚,因为它们都有 如下所示的特定用途 : 12 E E E E ESTM32 控制板上的晶振是 8MHz,此时钟信号会经由微控制器内部的倍频电路放大 9 倍,所以微控制器实际上是以 72MHz 运行的。 STM32F103xC 微控制器的原版(英文)技术文档记载的几个电流特性如下。 从电源引用的最大电流为 150mA。 每个引脚最高可输出或者引入 25mA。 使用外部时钟并启用所有外

19、设时,微控制器最大约消耗 67mA。70mA 因此,只剩下 80mA(150mA-70mA)可从 I/O 引脚输出。 Espruino 控制板的电源电路有个 1A 的保险丝,因此,整个控制板的电源输出(含 5V 和 3.3V 输出引脚)不会超过 1A。 1.1 Espruino程序开发软件Espruino 集成开发工具(IDE)是一个 Chrome 应用程序,请到 Chrome 应用程序商 店查找 Espruino,即可找到此 IDE。 13EEEEEEEE Espruino IDE 包含两个可左、右或者上、下排列的窗格,左边的窗格是串口终端, 本书有时称它为“控制台”,可在此输入 JavaS

20、cript 程序,并立即在连接的 Espruino 控制板上运行。 连接(连接控制板)帮助与教学清除终端画面保存文件 打开文件设置切换窗格排列1上传程序终端切换文本与图像式编辑器Espruino IDE 内置图像编程环境,操作方式如同图像编程的 Scratch、Blockly 或 制作 Android App 的“App Inventor”。 再按一下此钮,可回到“文本”编程环境。 Espruino 控制板相关命令14 图像编程环境留给读者自行探索,因为 Espruino 官网的技术文档和讨论区也很少提及与讨论这部分的功能,更别说其他 JavaScript 相关论坛和文章了。不过,对于高中文化

21、程度以下或者刚接触单片机的人来说,图像编程是个操控电脑的良好工具。 E E E E E连接 Espruino 和电脑 USB 端口先把 Espruino 控制板接上电脑的 USB 端口,笔者在 Windows 7, 8 和 10 等系统中测试,它都会自动安装 ST 芯片的 USB 串口驱动,Mac OS X 系统则无须安装驱动。然后, 请确认 Espruino 板所在的端面的例子显示为“COM9”。 ,Windows 用户请从“设备管理器”查看端,下 在 Mac OS X 的终端输入“ls-la /dev/tty.*”命令,可查看串口设备 ;Mac 上的 Espruino 串口名称格式为“/d

22、ev/tty.usbmodem ”。 此为 Espruino 序列装置15EEEEEEEE 打开 Espruino IDE,单击左上角的“连接”按钮,然后单击控制板所在的串口名称, 即可连接。 1连接成功或失败,IDE 右下角都会出现提示信息,如果无法连接,请再次确认电脑 分配给此控制板的串。 连接成功连接失败测试与上传程序与电脑连接成功后,你可以直接在终端窗格输入下面的 JavaScript 测试代码 : digitalPulse(LED1, 1, 500);按 Enter 键,控制板的 LED1 将闪烁一次(点亮 0.5 秒)。就像电脑的终端窗口, 在此终端窗格中按上、下方向键,可浏览之前

23、运行过的命令。 当然,我们可直接在代码编辑窗格中输入代码,请先输入下面的代码 :16 E E E E E输入完毕后,单击“上传”按钮,即可将代码“暂存”在控制板并且立即运行。不过, 当你拔除控制板的 USB 连接(中断电源)时,刚才的代码就立即消失了。若要将代码长期保留在微控制器,也就是“闪存”或“程序存储器”区中,请在程序最后一行加 入 save() : 再次单击“上传”按钮,程序将被写入微控制器的闪存。以后,只要控制板通电, LED1 就会持续地闪烁。 1.2 Espruino的基本硬件操作命令Espruino 许多硬件操作命令名称都和 Arduino 相同,本节将介绍数字输出、侦测 17

24、EEEEEEEE 引脚的高 / 低信号变化、模拟输出等基本命令及其使用示例。数字输出Espruino 控制板的数字输出命令语法和 Arduino 一样,可能的输出值为 0 或 1 : 1 digitalWrite( 引脚号 , 值 )Espruino 还可输出时钟信号(高、低电位变化): digitalPulse 通过微控制器内部的计时器生成精确的短时钟信号,如果不要输出数 毫秒的时钟,请改用 setTimeout : 例如,下面的代码将让 A14 脚的 LED2 每 1 秒闪烁 1 次 :18 Espruino 有个 Pin 类,用来定义板子上的引脚,并且事先针对个别引脚创建了对应的对象,例

25、如 A13、A14 等。另外,对于板子上预先接 上 LED 或是按钮的引脚,也定义了具有说明意义的常量别名,例如 : E E E E E LED1等同初版的 A13 脚或 Pico 的 B2。 LED2等同初版的 A14 脚或 Pico 的 B12。 LED3等同初版的 A15 脚 BTN等同初版的 B12 脚(控制板上的 BTN1 按钮)或 Pico 的 C13。 以上这些引脚,建议使用 LED1 等常量别名,因为对于不同的板子, 例如 Pico,LED1 的实际引脚并不相同,使用 LED1 这样的别名,在不同板子上的固件会指到正确的引脚,不需要因为使用的板子不同而修改 代码。 Pin 对象

26、也具有操控“数字引脚”的命令,例如 :A15.mode(output); /将 A15 设置成“ 输出模式”, 等同 pinMode(A15, output);A15.write(1);/ 在 A15 脚输出高电位,等同 digitalWrite(A15, 1);B12.read();/ 读取 B12 的输入值,等同 digitalRead(B12);D2.getInfo(); /返回 D2 引脚的信息和功能说明设置引脚模式与开漏极输出设置引脚模式的命令格式如下,若没有事先设置,运行 digitalRead 和 digitalWrite 等命令时,它们会自动设置引脚模式。 pinMode( 引

27、脚 , 模式 )常见的模式值(字符串格式)如下。y y yyinput :数字输入output :(普通的)数字输出 analog :模拟输入 input_pullup :数字输入,启用上拉电阻(约 40K)。 19EEEEEEEEy input_pulldown :数字输入,启用下拉电阻(约 40K)。 y opendrain :开漏极数字输出 下面的代码将把 LED3(A15 脚)设成“数字输出”,然后在此脚输出高电位 : 1下面是普通的数字输出(推拉式输出,push-pull 或 totem-pole)和开漏极输出 的比较。开漏极代表芯片内部的 MOSFET 漏极直接连到外部(注:若芯片

28、内部是晶体管,则称为,open collector)。若把 MOSFET 假想成开关,开关的一边必须连接电阻(通常用 4.7K 或 10K) 和电源,才能输出信号,因为开关不会自己生成电压。 开漏极主要有两个优点 : y 信号的高电位电压由外部 Vcc 决定。假设电路需要输出 5V 高电位,而非 STM32 的 3.3V,就能通过在 Vcc 接 5V 达到“转换电平”的效果。 y输出电流大(视外部电源而定),不限于微控制器的 25mA。 20pinMode(LED3, output);/ A15 脚设置成“输出”模式 digitalWrite(LED3, 1);/ 在 A15 脚输出高电位 通

29、过 setWatch() 侦测引脚变化“侦测引脚变化”类似 Arduino 的中断处理函数,程序无须轮询引脚的状态,而是在引脚发生变化时,自动运行“处理函数”,命令格式如下 : E E E E E setWatch( 处理函数 , 引脚编号 , 可选对象值 )不像 Arduino UNO 只有两个(数字 2 和 3)能处理外部中断的引脚,setWatch 可侦测 STM32 处理器的所有 I/O 引脚,但注意,它无法同时侦测两个相同编号的引脚,例如A0 和 B0、A5 和 B5,等等。 下面的程序可侦测 BTN(按钮,B12)信号,在它从低电位变成高电位时,闪烁LED1(位于 A13 脚):

30、edge(信号边缘)参数有三个可能值,默认值为 both : 通过 setWatch 命令,微控制器就不需要一直工作,可以进入省电的睡眠状态(参 阅下面的说明)。 模拟输出与输入读取与输出模拟信号的命令和 Arduino 相同,只是 Espruino 的模拟输出或输入值 都介于 01 之间,如表 1-1 所示。 21EEEEEEEE 表 1-1 :Espruino 与 Arduino 的模拟输出输入命令比较例如,analogWrite(C6, 0.5),代表在 C6 脚输出 50% 电位(注 :STM32 输出的高电位是 3.3V,C6 脚输出为 PWM 仿真模拟电位)。 1Arduino U

31、NO 板的模拟和数字输入脚,都可接受 5V 电压,Espruino 的 拟输入脚最大电压是 3.3V(极限为 3.6V)。所有标示 PWM 和 DAC 的引脚都能输出模拟信号(PWM是仿真值,DAC 是实际值)。 analogWrite(A5, 0.3)/ 在 A5 脚输出 0.99VSTM32 的模拟数字转换的分辨率为 12 位,可用 10 进位表示成 04095,每位的分 辨率为 :3.3V/4096=0.8mV(注 :Arduino UNO 的 ADC 是 10 位,可表示 01023)。 动手做使用光敏电阻制作小夜灯实验说明 :使用光敏电阻分压电路,感应光线变化,在黑夜自动点亮 LED

32、 ;白天关 闭 LED。 实验材料 :yy yEspruino 控制板 1 光敏电阻 1 电阻 10K1 实验电路 :光敏电阻分压电路如下图所示,电源接 3.3V,信号输出可接 STM32 微控制器的任 何 ADC 引脚(本例接 A1)。 22命 令ArduinoEspruinoanalogWrite() 输出整数值 :0255 输出浮点值 :01 analogRead() 输入整数值 :01023 输入浮点值 :01 E E E E E使用兼容 STM32 控制板的接线示例如下,LED 接在 A14 脚,等同 LED2。 实验代码 :下面程序将每隔 0.1 秒检测一次光敏电阻数据,若大于 0

33、.5 则点亮 LED2 : 实验结果 :上传程序后,遮住光敏电阻,LED2 将点亮 ;用灯光照射光敏电阻, LED2 将熄灭。 动手做呼吸灯效果实验说明 :练习通过 PWM 输出以及 setInterval 循环调整 LED 亮度。 实验材料 :yEspruino 控制板 123EEEEEEEEsetInterval(function () var light = analogRead(A1);/ 读取 A1 脚的模拟输入 if (light 0.5) digitalWrite(LED2, 1);/ 点亮 A14 脚的 LED2 if (light 0.4) digitalWrite(LED2

34、, 0);, 100);save();/ 把程序写入闪存 y 电阻 330(橙橙棕)1 y LED(颜色不拘)1 实验电路 : 请把 LED 和电阻接在 Espruino 板的 C6 脚。1实验代码 :编写程序之前,要先规划亮度变化的阶段数及秒数。笔者假设亮度像左下图一样 呈 25 阶段、线性变化,从最暗(0)到最亮(1),历时 1.5 秒。 依据上图右边的计算,每个阶段变化值为 0.04,间隔时间为 0.06 秒(60 毫秒)。也就是说,0.06 秒时的 PWM 输出为 0.04、0.12 秒为 0.08、0.18 秒为 0.12依此类推。理论上,程序只要每隔 0.06 秒为 PWM 值加上

35、 0.04,就能生成预期的效果。 但如果在 JS 控制台输入 0.2 + 0.04,得到的计算结果并非 0.24,而是 : 0.24000000000000002。解决方法是先用整数形式相加,再换算成小数点数字 : 笔者把亮度阶段值,设置成 step 变量,原本的值应该是 0.04,为了避免计算误差, 所以改成 4。保存模拟输出(亮度)值的变量是 pwm,当 pwm 累增到 100(亮度达到最大) 时,step 值要变成 -4,让 pwm 逐次降到 0(关灯);只要把 step 乘上 -1,即可转换正、 负值,完整的代码如下 : 24 E E E E E实验结果 :上传代码之后,接在 C6 脚

36、的 LED 将呈现出呼吸灯效果。 动手做超声波控制灯光亮度实验说明 :通过超声波传感器检测控制器和手掌的距离,若距离在 1030cm 之内,就依照距 离调整灯光的亮度。 实验材料 :yy yEspruino 控制板 1 超声波传感器 1 电阻 :330(橙橙棕)125EEEEEEEEy LED(任何颜色)1 实验电路 : 请参考下图组装电路。1实验代码一 :检测距离使用超声波检测距离时,需要先向它的 Trig(触发)脚输出一个 10 微秒的脉冲, 然后测量 Echo(回应)脚的高脉冲时间,即可将时间换算成距离(参考完美图解Arduino 交互设计入门一书第 9 章的“认识超声波”一节)。 首先

37、声明引脚和时间、距离等变量 :每隔 0.05 秒(亦即,每秒 20 次)向超声波的 Trig(触发)脚,传递 10 微秒的时脉信号,让模块发出超声波的代码(注 :digitalPul的时间单位是 ms): 发出超声波之后,便可通过 setWatch 函数,侦测回应信号的开始(rising,上升) 和结束(falling,下降)时间,计算两者的时间差就能求出距离(厘米): 26var TRIG = C7;/ 超声波触发引脚 var ECHO = C8;/ 超声波回应引脚 var t = 0;/ 存储超声波回应信号的时间 var dist = 0;/ 存储距离值 E E E E E最后通过下面的代

38、码,每隔一秒在控制台显示距离 :实验代码二 :使用 块(程序库)检测距离上文的代码需要我们阅读超声波传感器的技术文档,知道它的运作方式,才能写出正确的程序,这不是坏事。但如果有现成的程序模块(module,相当于 Arduino 的Library)可用,尽量使用模块,因为模块程序都经过验证,运行无误,我们只要专注 于开发和调试主程序。 Espruino 程序模块都放在云端,IDE 会在编译阶段自动从网络下载。官方列举的模 块及其说明放在网址 :/Modules。 模块通过 require() 命令引用,下面的程序语句将引用名叫 HC-SR04 的超声

39、波模块存入 sensor 对象 : var sensor = require(“HC-SR04”);超声波模块提供 connect( 连) 和 trigger( 触发) 两个函数,程序先运行connect() 函数,指定硬件引脚并接收回应信号,接着定时触发超声波模块,完整的代 码如下 : 27EEEEEEEEsetInterval(function() console.log(dist +“ cm”);, 1000) 1模块的下载网址,记录在开发工具的 COMMUNICATIONS(通信)菜单中的 Module URL(模块地址)字段里。 实验代码:依照距离调控灯光亮度 综合以上说明,先声明几

40、个变量 :接着编写依照测量距离调整 PWM 输出(亮度)的代码,假设距离是 25cm,根据下 面的算式,输出的 PWM 值为 0.75 : 笔者将处理距离与输出亮度的自定义函数命名为“setPWM”: 28var minDist = 10,/ 最小距离(厘米,即 cm) maxDist = 30,/ 最大距离(厘米,即 cm) limitDist = 40; / 侦测范围上限(厘米,即 cm) E E E E E最后,每 0.5 秒侦测一次距离 :实验结果 :在 1030cm 检测范围之内,LED 灯的亮度会随着距离变化。 1.3 Espruino的睡眠模式在微控制器不工作时,让它进入睡眠模式

41、,可大幅减少电力消耗,对于采用电池供电的微控制器尤其重要。Espruino 具有表 1-2 所列的三种运行模式(消耗电流中所列的小时数和天数,代表使用外置 2000mA/h 电池时的数据)。 表 1-229EEEEEEEE模 式消 耗 电 流备 注Run 约 35mA(57 小时)“运行”模式,Espruino 以 72Mhz 时钟速率运行程序 Sleep 约 12mA(7 天) “睡眠”模式,Espruino 停止 CPU 的时钟,但所有外设仍继续运行并且可以唤醒 CPU ;当 Espruino 不做任何事时,它会自动进入这个模式 setInterval(function() sensor.

42、trigger(); / 触发超声波 , 500);save();function setPWM(dist) / 依据输入距离,调整输出 PWM。var pwm = 0;/ PWM 输出值 dist = (distmaxDist)?maxDist:dist;/ 输入值不超过最大值 pwm = (dist-minDist) / (maxDist - minDist); analogWrite(C6, pwm);/ 调整 C6 脚的 LED 亮度 / 引用超声波模块,并且设置回应距离的函数 var sensor = require(“HC-SR04”).connect(C7,C8,function

43、(dist) if (dist 2 年)或 0.11mA (Espruino 1v3 版) “深层睡眠”或者说 Stop(停止运作)模式,Espruino 会停止除了RTC(实时时钟)以外的所有时钟(包含生成 PWM 信号的内部计时器)。CPU 可以在某个插脚改变状态(通过 setWatch 设置),或者某个时间到时(通过 setInterval 或 setTimeout 设置)被唤醒 实验代码 :setSleepIndicator() 命令会在控制板“从深层睡眠中苏醒”时,在指定脚输出高电 位信号,点亮 LED。 E E E E E以上程序里的 onInit() 函数,会在开机时自动被调用一

44、次,相当于 Arduino 的 setup() 函数。onInit() 函数也可以写成如下的处理程序 : “E”是 Espruino 内置的工具函数类,提供初始化处理、读取处理器内部温度 (E.getTemperature())、卸载 SD 内存卡(E.unmountSD())、生成随机数字种子(E.hwRand())等函数。 实验结果 :请使用外置电源连接 Espruino 板,每当 LED2 闪烁或者按钮被单击时,微控制器 将被唤醒,LED1 也将闪烁一次。 31EEEEEEEEE.on(init, function() / 侦听 init(初始化)setSleepIndicator(A1

45、3);/ 设置“睡眠苏醒”指示器 );function onInit() / 开机自动运行的初始化程序 setSleepIndicator(LED1);/ 指定 A13 脚(LED1)为“苏醒”指示器 setInterval(function() / 每隔 3 秒,闪烁一次 LED2(A14 脚) digitalPulse(LED2,1,50);, 3000);setWatch(function() / 按一下 B12 脚的按钮时,闪烁一次 LED3(A15 脚) digitalPulse(LED3,1,100);, BTN, repeat:true, edge:rising, debounc

46、e:30);setDeepSleep(1);/ 进入深层睡眠模式 save();/ 将程序写入微控制板 动手做蓝牙控制 LED实验说明 :通过电脑或手机蓝牙发送消息,控制 Espruino 板的 LED 灯光变化。1实验材料 :yyHC-05 或 HC-06 蓝牙串口通信板 1 Espruino 控制板 1 若使用兼容 Espruino 板,还需要 :y 电阻 :330(橙橙棕)3 y LED(颜色不拘)3 实验电路 : 原装的 Espruino 板子背面有预留焊接蓝牙串口通信板的位置,为了方便观察蓝牙 连接的状态,笔者额外在蓝牙板的第 31 脚,焊接一个 100(棕黑棕)串联一个 LED。3

47、2 牙板连STM32 的 Serial1口,也就是 A9 和 A10。使用非官方 Espruino板的读者,请参考下图连接蓝牙和 LED,实际的插脚以控制板的标示或厂家说明书为准; 蓝牙板的电源通常是 5V,有些要接 3.3V,请参阅笔者的博文“HC-05 与 HC-06 蓝牙模块补充说明(一)”(.tw/?p=693)。 E E E E E实验代码 :Espruino 的“数字输出”命令,可一次控制多个接脚的输出状态,像下面的程序 将可点亮 LED1 和 LED3、关闭 LED2 : 为了运用此简单的语法,请先把 LED 引脚存入 LEDS 数组变量,灯光点亮和熄灭

48、的 模式则以对象格式存入 LITE 变量 : 如此一来,下面代码的效果就和上面图示里的程序一样了 : digitalWrite(LEDS, LITE.C); / 输出 LITE 对象里的 C 属性值 蓝牙串口板连接在 Serial1 对象所代表的引脚,启用串口并接收数据的语法如下 : 33EEEEEEEE串口 .setup( 连接速率 );/ 初始化串口串口 .on(data, function( 接收数据 ) / 处理接收到的数据 );var LEDS = A13,A14,A15;var LITE = A: 0b001, B:0b010, C:0b101; 从串口发送字符串的语法,跟 Ard

49、uino 一样 :串口 .print()。因为本节的蓝牙通信 板接在 A9 和 A10 脚,因此“串口”要写成 Serial1 ;若接在 B10 和 B11 Serial3。接收蓝牙串口数据的代码如下 : ,则要写成1实际负责切换灯光的自定义函数如下 :最后加入下面的代码,让 Espruino 在开机启动时,将 USB 接口的串口设置成“主控台”。因为在未连接电脑的情况下,Espruino 默认会将 Serial1 设置成“主控台”,这样会导致程序无法处理蓝牙串口接口传入的数据,因此要通过下面的将 USB 设置成“主控台”: 处理函数, 实验结果 :先在电脑安装 AccessPort 或 Co

50、olTerm(参阅 :.tw/?p=499)等串口 34function onInit() USB.setConsole();/ 指定 USB 串口为“主控台” console.log(ready.);/ 在主控台显示“ready.” save();/ 将程序写入 Espruino 板 Serial1.setup(9600);/ 初始化 Serial1 串口 Serial1.on(data, function(cmd) console.log(cmd);/ 在主控台显示接收到的数据 switch(cmd) / 根据收到的a, b或c,切换灯光 case a: ligh

51、t(LITE.A); break;case b:light(LITE.B); break;case c:light(LITE.C); break; 通信软件,或者在 Google Play 或 AppStore 商店查找“Bluetooth Terminal”关键词,也能找到手机或平板的蓝牙串口通信程序。 将电脑或手机的蓝牙和 Espruino 配对之后,从电脑或手机发送a, b和c等字符,即可控制 LED 开关,而 Espruino 主控台也会显示接收到的字符,Espruino 接收到串口数据时的回应如下。 E E E E E 动手做蓝牙遥控车(电机控制)实验说明:延续上一节的程序,将 LED 为换成电机驱动板,让它依照w、a、s, d和x等字符输入,控制两个直流电机的转向。 实验材料 :yy yL298N 直流电机驱动板 1 直流电机 2(电机可能需要自行焊接 0.1F 电容) 蓝牙串口通信板 1 实验电路 :你可以用任何 L298N 电机控制板,但为了简化接线,本实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论