完美图解物联网实操esp8266arduino co移动app javas微控制器编程_第1页
完美图解物联网实操esp8266arduino co移动app javas微控制器编程_第2页
完美图解物联网实操esp8266arduino co移动app javas微控制器编程_第3页
完美图解物联网实操esp8266arduino co移动app javas微控制器编程_第4页
完美图解物联网实操esp8266arduino co移动app javas微控制器编程_第5页
已阅读5页,还剩232页未读 继续免费阅读

下载本文档

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

文档简介

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

2、。物联网的基本架构如下。可连接互联网设备的数量,在 2011 年时已超过地球总人口数。这些装置包含消电子、工厂设备、家电、医疗器材、传感器,等等。以往,资料通过人力输入到计算机(例如,抄录水电、煤气用量),现在多半则是由装置直接给另一个装置提供数据。举例来说,你的认得“你”和“家人”,当你的小孩抵达校园时,“学校”会自动通知 ;可以你的运动习惯并协调智能型温控器,在你到家之前2调整好室温 :若是下班快抵达家门时,可以自动过滤公司,并通知住家的房子自动打开车库门。快递的货车可实时更新网购商品的位置和预计送达的时间,也能了解送货路线的交通状况,并适时提醒或避开车流量大的路线。所以,人或者贴身和相互

3、连接、协同合作(Machine to Machine,M2M),就能完成的工作。随着宽带网络基础建设的普及和各式云服务的推陈出新, 和单片机技术的提升与价格下滑,使得“物联网”从概念融入加上传感器、通信了真实的日常生活。 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 或 GB),所以器不在同一个上,耗电量也较

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

6、 32 位 ARM 微器(STM32 系列), 固件内建JavaScript 解释器(Interpreter,也就是运行 JavaScript 语言的软件)的开源微板。Espruino目前推出两种板,一种是约为 Arduino UNO 2/3 大小的 Espruino(也称为 Espruino Original),另一种是约为成人拇指大小的 Espruino Pico。由于它的固件是开源的,所以只要处理器兼容,即使不是 Espruino推出的产品,也能够烧录 Espruino 固件,运行 JavaScript 程序。第 6说明如何挑选以及烧录 Espruino 兼容的微板。5无所不在的物联网装

7、置ESP8266板:采用中国地区乐鑫公司推出的 Wi-Fi 与 32 位系统SoC),板有不同的大小以及 I/O 脚数量可供选择。下图显示是最基本的 ESP-01 型,0此板约为成人拇指大小,并且预先烧录“Wi-Fi 转 TTL 串口通信”固件。因其价格低廉(约 35),所以一经推出,就受到创客圈的追捧。实际上,ESP8266 的处理性能高于 Arduino UNO,只拿它来当作 Wi-Fi 无线配适器,真是大材小用。许多程序员为此定制了多种开源固件,其中的一种能让我们通过Arduino 集成编辑器(IDE)以及 Arduino 的 C 语言来开发程序,所以它能,甚至能取代部分 Arduino

8、板。也有开发和厂商推出适用于 ESP8266板的 JavaScript 解释器,相关介绍与固件烧录说明,请参阅第 6 章。 0.2 章节导读第 1 章 Espruino板简介 :介绍采用 JavaScript 作为“母语”的 Espruino 开源板以及如何自行烧录一个兼容的 Espruino 板,并且通过超声波 LED 灯光强弱控制、蓝牙 H 桥电机认识 Espruino、SD 内存卡温湿度器、睡眠省电模式等 DIY 实操练习,方式。板的数字和I/O 脚的接线和6第 2 章开发移动设备 App :Cordova 的 Cordova 是一款、开源的工具软件,它让开发者使用 HTML 和 Jav

9、aScript 来开发和平板的 App。本说明 Cordova 与Android 系统的开发环境与相关软件的安装、App 程序基本架构,以及如何使用 jQueryMobile 创建 App 操作界面和创建通过网络(Wi-Fi)操控微板的App。第 3 章制作 Cordova 蓝牙传感器和串口通信等插件,制作App :讲解如何通过 Cordova 的蓝牙、度蓝牙人的 App,以及用的度传感器舵机云台。第 4 章 ESP8266 物联网应用入门 :介绍 ESP8266 微器的 I/O 脚, 连接Arduino板,提供 Arduino板 Wi-Fi 无线通信的功能,并且说明如何为它烧录Arduino

10、 固件,以及用 Arduino 的 C 语言操控 ESP8266。第 5 章零配置网络与 ESP8266 文件系统 :本说明如何为局域网里的 ESP8266板设置唯一的JavaScript)。,并且在 ESP8266 的闪存中网页文件(如 :HTML 和第 6 章 ESP8266 物联网实操 :介绍如何为 ESP 模块设置区域网络的、为ESP-01 模块烧录 Arduino 代码、通过网络更新 ESP 模块的固件、连接 OLED 显示屏,以及通过 Espruino(JavaScript 代码)ESP8266。7无所不在的物联网装置1Espruino板简介Espruino的开源软 / 硬件微板(

11、)是英国的 Gordon Williams 先生开发板,它最大的特色是采用 JavaScript 当作板的母语。Espruino2 系板采用欧洲半体公司(STMicroelectronics,ST) 制造的控(STM32F103RCT6,32 位 72MHz ARM Cortex M3 微器, 以下简称 STM32 微器),其性能比不上同样采用 ARM晶片的 Arduino DUE,但1STM32 的价格,跟 Arduino UNO 的 ATmega328 相差无几,性能却高出很多。截至 2015 年年底,Espruino 硬件有三个版本 :Original Espruino(初版,简称 Es

12、pruino, 定价 39.95)、Espruino Pico( 迷你版, 简称 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,人机界面设备)模式,可用程序设置成鼠标、键

13、盘或摇杆等输入设备。10因为造型迷你,Pico 的 IO 脚数量只有初版的一半, 但是 Pico 板采用的 ARM Cortex M4 处理器的性能高于初版的 ARM Cortex M3 ;内置的闪存和内存容量也大于初版。如果想要尝试其他编程语言,可以为它烧录 eLua 或 MicroPython 固件。Pico 的详E E E E E细技术规格、接脚和程序示例,请参阅说明页(本书的示例皆采用 Espruino 初版以及兼容的 STM32 微板,为 STM32 微器板烧入 Espruino 固件的说明,请参阅本章 1.4 节的“2控容 ”。STM32 微器和 Espruino板引脚简介STM3

14、2 微器的主要规格如下,除了 Espruino板,它也被其他品牌的控制板采用,像 OLIMEXINO-STM32、LeafLabs Maple 以及意法半导体公司自家的 STM32Discovery。yy y内置 256KB 闪存、48KB 内存。面 3 个串口(USART)、1 个 USB、2 个 SPI、2 个 I2C、1 个 CAN。16 个 ADC(模拟数字转换器,也就是“模拟输入引脚”)、26 个 PWM(模拟输出)和 2 个 DAC(数字模拟转换器)。yC ck相当于安装在微器里的时钟,可供程序查找日期与时间。Arduino 和 Raspberry Pi 不内置 RTC,需要使用外

15、部时钟模块(如 :DS3231)。y内置,可监测处理器的温度。Espruino 采用的这一款 STM32 微器个引脚,其中 51 个是I/O 脚,分成 A, B,C, D 端口,每个 I/O 引脚编号前面都会标上端口字母,如 :A0, A1, B0, C3, .,有些文档还会再加上“P”(代表端口,Port),如 :PA1, PA1, PB0,.,接线时,不用在意引脚是哪个端口,可以混合使用(但通常不同时使用相同编号的引脚,如 :A1 和 B1、A2和 B2, ,参阅下面的 setWatch 命令说明)。11EEEEEEEE1引脚的标示说明 :串口端口 -> 串行端口就像 Arduino

16、 UNO 的 ATmega328 微器,大部分引脚都具有多重功能。微器本身采用 3.3V 电源,除了上图中标示的 3.3V 脚之外,多数引脚都容许输入 5V。CAN 是 o t oo控局域 路)通信协议的简称,普遍用于工厂和汽车等干扰较多的场所,Expruino 目前并不支持 CAN 通信协议。某些引脚有特殊用途,很少挪作它用,接线时请避开它们。例如 OSC 与处理器晶振的引脚相连,“OSC RTC”则是内部时钟的晶振引脚,Espruino 没有接此晶振,但许多 STM32板都接。Espruino 没有引出如下所示的特定用途 :0(参阅下文)以及底下的微器接脚,因为它们12E E E E ES

17、TM32板上的晶振是 8MHz,此时钟信号会经由微器内部的倍频电路放大 9 倍,所以微器实际上是以 72MHz 运行的。STM32F103xC 微性如下。器的原版(英文)技术文档记载的几个电流特· 从电源的最大电流为 150mA。· 每个引脚最高可输出或者引入 25mA。· 使用外部时钟并启用所有外设时,微器最大约消耗 67mA。70mA 因此,只剩下 80mA(150mA-70mA)可从 I/O 引脚输出。Espruino板的电源电路有个 1A 的保险丝,因此,整个板的电源输出(含 5V 和 3.3V 输出引脚)超过 1A。 1.1 Espruino程序开发软件

18、Espruino 集成开发工具(IDE)是一个 Chrome 应用程序,请到 Chrome 应用程序商店查找 Espruino,即可找到此IDE。13EEEEEEEEEspruino IDE 包含两个可左、右或者上、下排列的窗格,左边的窗格是串口终端,本书有时称它为“板上运行。台”,可在此输入 JavaScript 程序,并立即在连接的 Espruino连接(连接板)帮助与教学清除终端画面保存文件打开文件设置切换窗格排列1上传程序终端切换文本与图像式编辑器Espruino IDE 内置图像编程环境,操作方式如同图像编程的 Scratch、Blockly 或制作 Android App 的“Ap

19、p Inventor”。再按一下此钮,可回到“文本”编程环境。Espruino板相关命令14图像编程环境留给读者自行探索,因为 Espruino 官网的技术文档和讨论区也很少提及与讨论这部分的功能,更别说其他 JavaScript 相关和文章了。不过,对于高中程度以下或者刚接触单片机的人来说,图像编程是个操控电脑的良好工具。E E E E E连接 Espruino 和电脑 USB 端口先把 Espruino板接上电脑的 USB 端口,笔者在 Windows 7, 8 和 10 等系统中测试,它都会自动安装 ST请确认 Espruino 板所在的端面的例子显示为“COM9”。的 USB 串口驱动

20、,Mac OS X 系统则无须安装驱动。然后,Windows 用户请从“设备管理器”查看端,下在 Mac OS X 的终端输入“ls-la /dev/tty.*”命令,可查看串口设备 ;Mac 上的Espruino 串口名称格式为“/dev/tty.usbmodem ”。此为 Espruino 序列装置15EEEEEEEE打开 Espruino IDE,即可连接。左上角的“连接”按钮,然后板所在的串口名称,1连接分配给此或失败,IDE 右下角都会出现提示信息,如果无法连接,请再次确认电脑板的串。连接连接失败测试与上传程序与电脑连接后,你可以直接在终端窗格输入下面的 JavaScript 测试代

21、码 : digitalPulse(LED1, 1, 500);按 Enter 键,板的 LED1 将闪烁一次(点亮 0.5 秒)。就像电脑的终端窗口,在此终端窗格中按上、下方向键,可浏览之前运行过令。当然,我们可直接在代码编辑窗格中输入代码,请先输入下面的代码 :16E E E E E输入完毕后“上传”按钮,即可将代码“暂存”在板并且立即运行。不过,当你拔除 长期保留在:板的 USB 连接(中断电源)时,刚才的代码就立即消失了。若要控是或储区中在后行再次“上传”按钮,程序将被写入微器的闪存。以后,只要板通电,LED1 就会持续地闪烁。 1.2 Espruino的基本硬件操作命令Espruino

22、 许多硬件操作命令名称都和 Arduino 相同,本节将介绍数字输出、侦测17EEEEEEEE引脚的高 / 低信号变化、模拟输出等基本命令及其使用示例。数字输出Espruino板的数字输出命令语法和 Arduino 一样,可能的输出值为 0 或 1 :1 digitalWrite( 引脚号 , 值 )Espruino 还可输出时钟信号(高、低电位变化):digitalPulse 通过微器内部的计时器生成精确的短时钟信号,如果不要输出数毫秒的时钟,请改用 setTimeout :例如,下面的代码将让 A14 脚的 LED2 每 1 秒闪烁 1 次 :18Espruino 有个 Pin 类,用来定

23、义板子上的引脚,并且事先个别引脚创建了对应的对象,例如 A13、A14 等。另外,对于板子上预先接上 LED 或是按钮的引脚,也定义了具有说明意义的常量别名,例如 :E E E E E· LED1等同初版的 A13 脚或 Pico 的 B2。· LED2等同初版的 A14 脚或 Pico 的 B12。· LED3等同初版的 A15 脚· BTN等同初版的 B12 脚(C13。板上的 BTN1 按钮)或 Pico 的以上这些引脚,建议使用 LED1 等常量别名,因为对于不同的板子, 例如 Pico,LED1 的实际引脚并不相同,使用 LED1 这样的别名,

24、在不同板子上的固件会指到正确的引脚,不需要因为使用的板子不同而修改代码。Pin 对象也具有操控“数字引脚”令,例如 :A15.mode("output"); /将 A15 设置成“输出模式”, 等同 pinMode(A15, "output");A15.write(1);/ 在 A15 脚输出位,等同 digitalWrite(A15, 1);B12.read(); / D2.getInfo(); /B12 的输入值,等同 digitalRead(返回 D2 引脚的信息和功能说明B12);设置引脚模式与开漏极输出设置引脚模式 令格式如下,若没有事先设置,

25、运行 digitalRead 和digitalWrite 等命令时,它们会自动设置引脚模式。 pinMode( 引脚 , 模式 )常见的模式值(字格式)如下。yy y y'input' :数字输入'output' :(普通的)数字输出 'analog' :模拟输入'input_pullup' :数字输入,启用上拉电阻(约 40K)。19EEEEEEEEy 'input_pulldown' :数字输入,启用下拉电阻(约 40K)。y 'opendrain' :开漏极数字输出下面的代码将把 LED3(A

26、15 脚)设成“数字输出”,然后在此脚输出位 :1下面是普通的数字输出(推,push-pull 或 totem-pole)和出的比较。开漏极代表内部的 MOSFET 漏极直接连到外部(注:若内部是晶体管,则称为,open collector)。若把 MOSFET 假想成开关,开关的一边必须连接电阻(通常用 4.7K 或 10K)和电源,才能输出信号,因为开关生成电压。开漏极主要有两个优点 :y 信号的位电压由外部 Vcc 决定。假设电路需要输出 5V位,而非 STM32的 3.3V,就能通过在 Vcc 接 5V 达到“转换电平”的效果。y 输出电流大(视外部电源而定),不限于微器的 25mA。

27、20pinMED3, 'output'); / A15 脚设置成“输出”模式digitalWrite(LED3, 1);/ 在 A15 脚输出位通过 setWatch() 侦测引脚变化“侦测引脚变化”类似 Arduino 的中断处理函数,程序无须轮询引脚的状态,而是在引脚发生变化时,自动运行“处理函数”,命令格式如下 : setWatch( 处理函数 , 引脚编号 , 可选对象值 )不像 Arduino UNO 只有两个(数字 2 和 3)能处理外部中断的引脚,setWatch 可侦E E E E E测 STM32 处理器的所有 I/O 引脚,但注意,它无同时侦如 A0 和 B

28、0、A5 和 B5,等等。个相同号的引,例下面的程序可侦测LED1(位于 A13 脚):信号,在它时,闪烁参数有能值,默认值为 'both' :通过 setWatch 命令,微阅下面的说明)。器就不需要一直工作,可以进入电态(参模拟输出与输入与输出模拟信号间令和 Arduino 相同,只是所示。u o 的出或入于 021EEEEEEEE表 1-1 :Espruino 与 Arduino 的模拟输出输入命令比较例如,analogWrite(C6, 0.5),代表在 C6 脚输出 50% 电位(注 :STM32 输出的1位是 3.3V,C6 脚输出为 PWM模拟电位)。Arduin

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

30、15;1yy y板×1电阻 10K×1实验电路光敏电阻分压电路如下图所示,电源接 3.3V,信号输出可接 STM32 微器的任何 ADC 引例接 A1)。22命 令ArduinoEspruinoanalogWrite()输出整数值 :0255输出浮点值 :01analogRead()输入整数值 :01023输入浮点值 :01E E E E E使用兼容 STM32板的接线示例如下,LED 接在 A14 脚,等同 LED2。实下面程序将每隔 0.1 秒检测一次光敏电阻数据,若大于 0.5 则点亮 LED2 :实结果上传程序后,遮住光敏电阻,LED2 将点亮 ;用灯光照射光敏电阻

31、,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, 0);, 100);save(); / 把程序写入闪存y 电阻 330(橙橙棕)×1y LED(

32、颜色不拘)×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 值加上 0.04,就能生成预期的效果。但如果在 JS台输入 0.2 + 0.04,得到的计算结果并非 0.24,而是 :0.

33、24000000000000002。解决方法是先用形式相加 再换 成小 点:笔者把亮度阶段值,设置成 step 变量,原本的值应该是 0.04,为了避免计算误差,所以改成 4。保存模拟输出(亮度)值的变量是 pwm,当 pwm 累增到 100(亮度达到最大)时,step 值要变成 -4,让 pwm 逐次降到 0(关灯);值,完整的代码如下 :s上可正、24E E E E E上传代码之后,接在 C6 脚的 LED 将呈现出呼吸灯效果。 动手做 超声波灯光亮度实通过超声波传感器检测离调整灯光的亮度。器和手掌的距离,若距离在 1030cm 之内,就依照距yy yEspruino板×1超声波

34、传感器 ×1电阻 :330(橙橙棕)×125EEEEEEEEy LED(任何颜色)×1验电请参考下图组装电路。1验 码一距使用超声波检测距离时,需要先向E ho回)的高冲时间的 Tr g可)间换成个 0的脉冲(参考完美图解Arduino 交互设计入门一书第 9 章的“认识超声波”一节)。首先引脚和时间、距离等变量 :每隔 0.05 秒(亦即,每秒 20 次)向超声波的 Trig(触发)脚,传递 10 微秒的时脉信号,让模块发出超声波的代码(注 :d g t P的时间):发出超声波之后,便可通过 setWatch 函数,侦始g上)和 束 fg差:26var TRIG

35、 = C7;/ 超声波触发引脚var ECHO = C8;/ 超声波回应引脚var t = 0;/超声波回应信号的时间var dist = 0;/距离值E E E E E最后通过下面的代码,每隔一秒在台显示距离 :实用 块 程 库距上文的代码需要我们阅读超声波传感器的技术文档,知道它的方式,才能写出正确的程序,这不是坏事。但如果有现成的程序块(module,相当于 Arduino 的Library)可用,尽量使用模块,因为模块程序都经过验证,运行无误,我们只要专注于开发和调试主程序。Espruino 程序模块都放在云端,IDE 会在编译阶段自动从网络。列举的模块及其说明放在:。模块通过qu r

36、 ) 命令块存入 sensor 对象 :,下面的程序语句将名叫 "HC-SR04" 的超声波模 var sensor = require(“HC-SR04”);超声波模块提供c和g触两个函数,运行connect() 函数,指定硬件引脚并接收回应信号,接着定时触发超声波模块,完整的代码如下 :27EEEEEEEEsetInterval(function() console.log(dist + “ cm”);, 1000)1模块的,在开发工具的 COMMUNICATIONS(通信)菜单中的 ModuleURL(模块地址)字段里。验依调控灯光亮度综合以上说明,先几个变量 :接着

37、编写依照测量距离调整 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的睡眠模式在微供电的微器不工作时,让它进入睡眠模式,可大幅减少电力消耗,对于

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

39、ave();function setPWM(dist) / 依据输入距离,调整输出 PWM。var pwm = 0;/ PWM 输出值dist = (dist<minDist)?minDist:dist; / 输入值不低于最小值dist = (dist>maxDist)?maxDist:dist; / 输入值不超过最大值pwm = (dist-minDist) / (maxDist - minDist); analogWrite(C6, pwm);/ 调整 C6 脚的 LED 亮度/超声波模块,并且设置回应距离的函数var sensor = require(“HC-SR04”).c

40、onnect(C7,C8,function(dist) if (dist < limitDist) / 若距离在指定范围内,才需要调整亮度setPWM(dist););续表1STM32 微器还具有 t)(消耗电流很低,但内存的全部数据都会消失),Espruino 尚不支持“待机”模式。让 Espruino 进入睡眠模式让 Espruino 进入入 层睡眠模式:跟电脑的令是t1 ,但唯有 列成yEu o 控B 接口相连(注 :连接 USB 外置电源,不影响板用于侦测是否与电脑 USB 接口相连,所以若它进入要启用睡眠)。A11 脚被睡眠,程 不可sh或 C 1 脚。yy y没有准备通过串口

41、或 USB数据。在 1.5 秒内,没有尚待运行的 setIntervals 或 setTimeout 函数。没有尚未运行完毕的 digitalPulse输出。 动手做睡眠实验验说在连接电脑 USB 接口情况下,Espruino进入睡眠模式;一旦进入睡眠模式,它将无法接收和串口数据,但 setIntervals, setTimeout 和 setWatch 函数仍能。本节程序将借助 LED 灯光变化,显示板是否被唤醒。30Deep Sleep约 0.03mA(> 2 年)或 0.11mA(Espruino 1v3 版)“睡眠”或者说 Stop(停止)模式,Espruino 会停止除了RTC

42、(实时时钟)以外的所有时钟(包含生成 PWM 信号的内部计时器)。CPU 可以在某个插脚改变状态(通过 setWatch 设置),或者某个时间到时(通过 setInterval 或 setTimeout 设置)被唤醒setSleepIndicator() 命令会在位信号,点亮 LED。板“从睡眠中苏醒”时,在指定脚输出E E E E E以上的(在一次相于处理程序 :du ou )。onInit() 函数也可以写成如下的是u o的类,提供初始化处理、处理器内部温度E.hwRand())(E.getTemperature())、卸载 SD 内存卡(E.unmountSD())、生成随机数字等函数。

43、结请使用外置电源连接 Espruino 板,每当 LED2 闪烁或者按钮被将被唤醒,LED1 也将闪烁一次。时,微器31EEEEEEEEE.on('init', function() / 侦听 init(初始化) setSleepIndicator(A13);/ 设置“睡眠苏醒”指示器);function onInit() / 开机自动运行的初始化程序setSleepIndicator(LED1); / 指定 A13 脚(LED1)为“苏醒”指示器setInterval(function() / 每隔 3 秒,闪烁一次 LED2(A14 脚)digitalPulse(LED2,

44、1,50);, 3000);setWatch(function() / 按一下 B12 脚的按钮时,闪烁一次 LED3(A15 脚)digitalPulse(LED3,1,100);, BTN, repeat:true, edge:rising, debounce:30);setDeepSleep(1);/ 进入睡眠模式save();/ 将程序写入微板 动手做 蓝牙LED验通过电脑或蓝牙消息,Espruino 板的 LED 灯光变化。1验HC-05 或 HC-06 蓝牙串口通信板 ×1yyEspruino板×1若使用兼容 Espruino 板,还需要 :y 电阻 :330(

45、橙橙棕)×3y LED(颜色不拘)×3验电原装的 Espruino 板子背面有预留焊接蓝牙串口通信板的位置,为了方便观察蓝牙连接的状态,笔者额外在蓝牙板的第 31 脚,焊接一个 100(棕黑棕)串联一个 LED。32的 e1口A910。使用非Espruino板的读者,请参考下图连接蓝牙和 LED,实际的插脚以板的标示或厂家说明书为准;蓝牙板的电源通常是 5V,有些要接 3.3V,请参阅笔者的博文“HC-05 与 HC-06 蓝牙模E E E E E块补充说明(一)”()。实Espruino 的“数字输出”命令,可一次将可点亮 LED1 和 LED3、关闭 LED2 :多个接

46、脚的输出状态,像下面的程序为了运用此简单的语法,请先把 LED 引脚存入 LEDS 数组变量,灯光点亮和熄灭的模式则以对象格式存入 LITE 变量 :如此一来,下面代码的效果就和上面图示里的程序一样了 : digitalWrite(LEDS, LITE.C); / 输出 LITE 对象里的 C 属性值蓝牙串口板连接在 Serial1 对象所代表的引脚,启用串口并接收数据的语法如下 :33EEEEEEEE串口 .setup( 连接速率 ); / 初始化串口串口 .on('data', function( 接收数据 ) / 处理接收到的数据);var LEDS = A13,A14,

47、A15;var LITE = A: 0b001, B:0b010, C:0b101;从串口字的语法,跟 Arduino 一样 :,因此“串口”要写成 e( 。因10 和 B节的蓝牙通信板接在和;则成接收蓝牙串口数据的代码如下 :1实际负责切换灯光的自定义函数如下 :最后加入下面的代码,让 Espruino 在开机启动时,将 USB 接口的串口设置成“主控台”。因为样接下u oe,因此要通过下面的控处理函数,接口入的将 USB 设置成“主控台”:验结果先在电脑安装 AccessPort 或 CoolTerm(参阅 :)等串口34function onInit() USB.setConsole()

48、;/ 指定 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: light(LITE.A); break;case b:light(LITE.B); break;case c:light(LITE.C);

49、break;);通信软件,或者在Play 或 AppStore 商店查找“Bluetooth Terminal”,也能找到或平板的蓝牙串口通信程序。将电脑或等字符,即可的蓝牙和 Espruino 配对之后,从电脑或a, b和cE E E E ELED 开关,而 Espruino 主控台也会显示接收到的字符,Espruino 接收到串口数据时的回应如下。 动手做 蓝牙车(电机)延续的程序,将 LED 为换成电机驱动板,让它依照w、a、s,d和x等字符输入,两个直流电机的转向。实yy yL298N 直流电机驱动板 ×1直流电机 ×2(电机可能需要自行焊接 0.1µF

50、电容) 蓝牙串口通信板 ×1你可以用任何 L298N 电机板,但为了简化接线,本实验采用包含 74HC14 IC的板(其他 L298N 板子的说明,请参阅下文)。无论用电机板,它的电源都要外置。采用非Espruino 板的接线示例如下,实际接线引脚以板的说明文档为主。35EEEEEEEE1此电机板的输出输入关系表请参阅表 1-3。表 1-3验代从表 1-3 以及接线图可知,输出底下的数字信号将能两个电机正、反转 :不过,数字输出无法转速。 使引脚若即可控速 analogWrite() 函数可加入选择性的 PWM 频率设置参数,是 Hz :36E E E E E本节程序把以上代码写成自

51、定义函数,并且接收 dir(转向)和 pwm(功率)两个参数 :为了增加代码的可读性,我们可以用下面的对象数据电机的转向信号 :初始化串口以及接收串口消息的代码和 LED 灯光程序差不多 :37EEEEEEEESerial1.setup(9600); / 初始化 Serial1 串口Serial1.on(data, function(cmd) console.log(cmd); / 在主控台显示接收到的数据switch(cmd) / 根据收到的w, a, s, d或x,电机case 'w' :/ 前进motor(dir.forward, 0.6); break;case 'a':/ 左转motor(dir.left, 0.6); break;case 'd':/ 右转motor(dir.right, 0.6); break;case 's':/ 后退motor(dir.back, 0.6); break;case 'x':/ 停止motor(0, 0); break;);var dir = w rd 0b11, / 前进0b01,/ 左转t 0b10,/ 右转k 0b00/ 后退;function motor(dir,

温馨提示

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

评论

0/150

提交评论