产品特色
内容简介
为个人爱好和专业应用创建嵌入式项目
以基于项目构建嵌入式Java应用的方式加入物联网大潮!由两位知名Java专家联袂撰写的 物联网编程实战 应用Raspberry Pi和Java 呈现一系列低成本DIY项目,可帮助你逐步提升开发技能。你将学习如何搭建及配置Raspberry Pi、连接外部硬件、使用NetBeans IDE以及编写和嵌入强大的Java应用。本书涵盖大量业余应用及专业级家庭和企业应用。
主要内容
● 通过连接硬件和编写Raspberry Pi程序来酿造一杯醇美咖啡
● 使用Pi的GPIO功能创建二进制定时器
● 通过魔法帽项目探讨可穿戴设备的程序设计
● 在Makeblock机器人技术平台上编写程序来创建自主机器人
● 接上高精度电子秤、温度传感器和触摸屏来设计一套泡茶用具
● 使用Pi替换简单四轴飞行器的大脑使其蜕变为功能强大的无人机
● 在Raspberry Pi上开发一款运行经典游戏的模拟器
● 使用复古风格的3D打印品组装便携式游戏机
作者简介
Stephen Chin,是Oracle Java大使,擅长嵌入式和UI技术,也是JavaOne Content的联合主席。他在JavaOne等众多全球性Java会议上发表主题发言,并四次荣膺Rock Star Award奖。
James L. Weaver,是Oracle Java大使、开发者和作家。James已参与和独立撰写多本书籍,包括Inside Java 、Beginning J2EE 系列以及Pro JavaFX 系列。
内页插图
目录
第1章 烘焙Pi 1
1.1 启动Raspberry Pi 2
1.1.1 选购兼容的SD卡 3
1.1.2 格式化SD卡 4
1.2 安装Raspbian 6
1.2.1 将Raspberry Pi接入网络 6
1.2.2 如何判断Raspberry Pi工作正常 8
1.3 安装带有NOOBS的Raspbian 10
1.4 Raspberry Pi入网 16
1.4.1 通过以太网连接 16
1.4.2 通过本地计算机网络连接 16
1.4.3 通过无线网络连接 19
1.4.4 更新和升级 21
1.4.5 设置主机名 21
1.4.6 通过SSH连接到Raspberry Pi上 22
1.5 创建一个简单的Raspberry Pi应用 25
第2章 第一个Java项目 27
2.1 材料清单 28
2.2 NetBeans入门 28
2.2.1 下载并配置NetBeans 29
2.2.2 HelloRaspberryPi回顾 31
2.3 烹煮Java 35
2.3.1 与USB电子秤通信 35
2.3.2 咖啡计算器 44
2.3.3 异步通信 47
2.3.4 咖啡酿造配方 51
2.4 商业许可 56
第3章 二进制定时器 59
3.1 材料清单 60
3.2 通过Java访问GPIO 62
3.2.1 安装Device I/O库 63
3.2.2 Device I/O的引脚分配 65
3.2.3 Device I/O库LED测试 68
3.3 使用Pi4J 74
3.3.1 Pi4J引脚分配 74
3.3.2 Pi4J LED测试 76
3.4 以二进制倒计时 78
3.4.1 实现一个二进制定时器 78
3.4.2 面包板布线 82
3.4.3 二进制定时器算法 87
3.4.4 完整的二进制定时器 97
3.5 红利:GPIO性能揭秘 98
第4章 物联网礼帽 107
4.1 材料清单 108
4.2 设置Raspberry Pi A+ 110
4.3 Raspberry Pi对NFC/RFID的支持 111
4.3.1 为I2C、SPI和UART配置Raspberry Pi 112
4.3.2 连接智能卡读卡器 114
4.3.3 配置NFC库 121
4.3.4 编译和安装libnfc 121
4.3.5 编译并安装ifdnfc 125
4.4 从Java读智能卡 128
4.5 物联网礼帽的物理结构 132
第5章 循迹小车 139
5.1 物料清单 140
5.2 组装机器小车 142
5.3 循迹小车程序设计 152
5.3.1 Makeblock/ARPI600引脚映射 153
5.3.2 脉冲宽度调制 156
5.3.3 红外控制器 159
5.3.4 循迹 163
5.3.5 障碍物检测 166
5.4 小结 169
第6章 茶栈 171
6.1 物料清单 172
6.1.1 选择电子秤 172
6.1.2 温度探测 175
6.1.3 触摸屏显示 175
6.1.4 茶叶供应商 177
6.1.5 杂项资料 178
6.2 基于串行电子秤的精密测量 179
6.2.1 连接串行电子秤 180
6.2.2 借助Minicom进行测试 183
6.3 通过Java访问电子秤 187
6.3.1 通过Pi4J读串行数据 188
6.3.2 电子秤的串行实现 191
6.4 高精度温度传感器 197
6.4.1 单总线串行接口 198
6.4.2 测试DS18B20 199
6.4.3 通过Java访问温度传感器 202
6.5 茶叶配方 206
6.6 JavaFX UI 210
第7章 自主飞行的无人机 221
7.1 硬件材料清单 222
7.2 所需软件 225
7.3 构建自主飞行的无人机 227
7.3.1 安装Raspberry Pi 227
7.3.2 在Raspberry Pi和无人机之间建立无线网络连接,
把Raspberry Pi配置成一个无线访问热点(WAP) 227
7.3.3 组装并固定无人机的硬件 234
7.3.4 编写一个包含飞行指令的Java方法 236
7.3.5 通过NetBeans连接到Raspberry Pi上并远程部
署Java应用程序和支持库 237
7.3.6 调用Java应用程序来控制无人机飞行 238
7.4 实现更高级别的自治 238
7.4.1 在三维空间中定位无人机 239
7.4.2 实现控制回路 239
第8章 复古视频游戏模拟器 241
8.1 物料清单 242
8.1.1 Raspberry Pi 243
8.1.2 显示和适配器 243
8.1.3 扬声器和音频 244
8.1.4 导航和按钮 245
8.1.5 布线和工具 247
8.2 创建GPIO控制器 248
8.2.1 控制器布线 249
8.2.2 焊接Kippah 252
8.2.3 连接Kippah 255
8.2.4 连接扬声器 258
8.3 模拟NES 260
8.3.1 运行模拟器 261
8.3.2 Raspberry Pi超频 265
8.3.3 NES自动启动 266
第9章 NightHacking RetroPi 267
9.1 物料清单 268
9.1.1 供电 268
9.1.2 3D打印机 269
9.2 RetroPi外壳的建造 272
9.2.1 Autodesk Fusion 360 3D建模 274
9.2.2 打印外壳 278
9.3 组装RetroPi 281
9.3.1 直接连接音频 281
9.3.2 便携式电源 282
9.3.3 按钮重新布线 285
9.3.4 安装内部硬件 288
9.3.5 连接显示屏 293
前言/序言
Raspberry Pi在嵌入式开发领域引发了一次变革,它降低了计算机程序员搭建与外部物理世界交互的设备的入门难度。Java SE和Java ME的嵌入式应用以Raspberry Pi作为参考平台,使其成为进入嵌入式应用开发的Java开发者的可选平台。官方Raspbian镜像中同样预装了Java,并使其成为适用于Raspberry Pi的性能最好的高级语言。本书的作者充分考虑了这一点,利用Java对Raspberry Pi进行程序设计,帮助读者快速开展物联网方面的开发,参与这场物联网变革。
本书读者对象
不论是经验丰富的业余爱好者还是老练的专业人士,你都会发现,本书有助于提升你创建运行于嵌入式设备上的应用程序的能力。我们有意识地选择低成本项目和硬件,降低入门难度。我们同时采用一种考虑了渐进学习曲线的、基于项目的学习方法,使本书更通俗易懂。
本书主要内容
本书列举了几个项目,设计这些项目旨在提升嵌入式应用的开发能力,这些嵌入式应用可以用到不同的家庭和工业场合。下面是关于本书主要内容的纲要。
第1章:剖析Pi 该章介绍Raspberry Pi的配置过程,以及如何将其连接到计算机上,并通过一个简单的Java应用进行测试。
第2章:第一个Java项目 该章将在计算机上建立一个Java集成开发环境(Integrated Development Environment,IDE),具体说就是NetBeans。在Raspberry Pi上使用这个IDE来开发和远程部署Java应用程序。同时还会创建一个不错的项目,借助Java和Pi酿造一杯完美的咖啡。
第3章:二进制定时器 该章利用Raspberry Pi的GPIO(通用I/O)功能创建一个二进制定时器。在这个过程中学习如何使用Robert Savage编写的Pi4J库,来快速完成离散设备I/O项目。
第4章:物联网礼帽 该章通过对魔法帽子设计过程的逐步指导,演示不同形式的设备I/O。该项目是可穿戴计算的一个有趣的例子,也是一个能够使你的朋友印象深刻的例子。
第5章:循迹小车 该章将通过Makeblock机器人技术平台创建一个自主机器人,当然,还要用到Raspberry Pi和Java。
第6章:茶栈 重温第2章的咖啡酿造项目,该章将使用更高精度的设备以及一块触摸屏来冲泡一杯香气怡人的茶。
第7章:自主飞行的无人机 通过为四轴飞行器加装一个Rasp- berry Pi大脑,将其转变为一台自主飞行的无人机。
第8章:复古视频游戏模拟器 该章将创建一个由Java驱动的模拟器,可以使我们在Raspberry Pi上玩经典的红白机(Nintendo Entertainment System,NES)游戏。
第9章:NightHacking RetroPi 该章介绍如何将第8章介绍的NES模拟器转换成由3D打印机制造的复古风格的便携式游戏机,使我们在现代硬件设备上重温经典游戏。
代码下载
可从McGraw-Hill专业网站www.mhprofessional.com下载本书的实例代码。搜索ISBN访问可用的下载即可。
此外,在GitHub上可得到本书的项目代码,地址是https:// github.com/RaspberryPiWithJava。
也可以访问www.tupwk.com.cn/downpage,输入本书中文书名或中文ISBN,下载代码。
在为业余爱好以及专业物联网应用创建嵌入式项目时,我们希望本书能够成为一个有价值的资源。翻开书页,由此开始!
《嵌入式系统开发:从理论到实践》 一、 概述 本书旨在为读者构建一个全面而深入的嵌入式系统开发知识体系,涵盖从基础理论到实际应用的各个环节。在物联网技术蓬勃发展的今天,嵌入式系统作为其核心驱动力,其重要性不言而喻。本书的目标是培养读者独立完成嵌入式项目设计、开发、测试与优化的能力,使其能够 confidently 地应对日益复杂的嵌入式开发挑战。不同于侧重于特定硬件平台或特定编程语言的教材,本书更强调嵌入式系统设计的通用原理、方法论和设计模式,为读者打下坚实的理论基础,使其能够触类旁通,快速适应不同的开发环境和技术栈。 二、 目标读者 本书适合以下人群: 在校学生: 计算机科学、电子工程、自动化等相关专业的本科生、研究生,希望系统学习嵌入式系统开发,为未来的学习和职业发展打下基础。 初级嵌入式工程师: 希望巩固和深化嵌入式系统知识,提升开发技能,掌握更先进的设计理念和调试技巧。 转行开发者: 来自其他软件开发领域,希望转向嵌入式开发,但缺乏系统性的嵌入式基础知识。 硬件工程师: 希望理解软件在嵌入式系统中的作用,学习如何与软件开发人员有效协作,或者尝试自己进行简单的嵌入式软件开发。 项目管理者: 希望对嵌入式项目的开发流程、技术难点有更深入的了解,以便更有效地进行项目规划和资源分配。 三、 内容亮点与特色 1. 系统性的理论框架: 微控制器与微处理器原理: 深入剖析CPU架构、指令集、存储器管理、中断机制、I/O端口等核心概念,理解嵌入式系统的硬件基础。 实时操作系统(RTOS)原理与应用: 详细讲解任务调度、进程间通信(IPC)、同步与互斥、内存管理等RTOS的关键特性,并介绍主流RTOS(如FreeRTOS, Zephyr)的内部机制和使用方法。 嵌入式系统软件架构设计: 探讨分层架构、模块化设计、驱动程序模型、中间件和应用层分离等设计原则,指导读者构建可维护、可扩展的嵌入式软件。 外围设备接口技术: 涵盖SPI, I2C, UART, ADC, DAC, PWM等常用接口的原理、通信协议和驱动开发。 2. 丰富的实践案例与方法论: 从需求分析到系统集成: 引导读者遵循完整的嵌入式项目开发流程,包括需求分析、系统设计、软件开发、硬件选型、集成测试、性能优化等。 调试与故障排除技巧: 强调调试在嵌入式开发中的重要性,介绍逻辑分析仪、示波器、JTAG/SWD调试器等常用调试工具的使用,并分享系统性排查硬件和软件问题的策略。 嵌入式Linux开发: 即使本书不直接聚焦于特定的Linux开发板,但会深入讲解嵌入式Linux的通用开发环境搭建、交叉编译、文件系统构建、设备树(Device Tree)的原理与使用、驱动程序开发(字符设备、块设备、网络设备)等核心内容,为读者使用如树莓派等Linux平台进行嵌入式开发奠定基础。 面向对象与设计模式在嵌入式开发中的应用: 讨论如何利用面向对象思想和常见设计模式(如状态机、观察者模式、单例模式)来提升嵌入式代码的质量和可读性。 3. 跨越硬件与软件的鸿沟: 理解硬件限制与设计权衡: 强调嵌入式系统资源(CPU、内存、功耗)的有限性,教会读者如何在资源约束下进行最优化的设计决策。 嵌入式软件与硬件的协同: 深入讲解驱动程序开发、硬件抽象层(HAL)的设计,以及如何通过软件充分发挥硬件的性能。 4. 通用性与前瞻性: 关注底层原理: 本书不局限于特定芯片或开发板,而是深入挖掘底层原理,使读者掌握的概念能够迁移到其他平台。 现代化开发实践: 引入版本控制(Git)、自动化构建(Makefile, CMake)、单元测试等现代软件工程的最佳实践,提升开发效率和代码质量。 物联网基础设施的视角: 即使不直接涉及应用层的物联网协议,本书所讲解的嵌入式系统开发能力,是构建任何可靠的物联网设备的基础。读者将了解到如何开发能够稳定运行、高效通信、安全可靠的嵌入式“节点”设备。 四、 内容结构(章节概览) 本书将分为以下几个主要部分: 第一部分:嵌入式系统基础 第一章:嵌入式系统概述 什么是嵌入式系统? 嵌入式系统的特点与应用领域 嵌入式系统与通用计算机系统的区别 嵌入式系统开发流程概览 第二章:微处理器与微控制器架构 CPU的核心概念:指令集、流水线、缓存 存储器类型:RAM, ROM, Flash 中断系统:中断控制器、中断向量 I/O端口与通用输入输出(GPIO) 不同微控制器家族(ARM Cortex-M, RISC-V 等)的架构特点(概览) 第三章:嵌入式系统软件开发环境 集成开发环境(IDE)的选择与使用 交叉编译工具链:GCC, Clang 汇编语言基础与嵌入式开发中的作用 链接器脚本与内存映像 第二部分:实时操作系统(RTOS) 第四章:实时操作系统原理 RTOS的角色与必要性 任务(Thread)与任务管理:创建、删除、就绪、运行、阻塞、挂起 任务调度算法:优先级调度、时间片轮转、轮询调度 任务间通信(IPC):队列、信号量、事件标志组 同步与互斥:互斥锁、临界区 实时时钟与定时器 第五章:RTOS内核剖析与高级特性 RTOS的内存管理:静态分配、动态分配 中断处理与RTOS的结合 功耗管理与低功耗模式 RTOS的移植与配置 第六章:实践:使用RTOS开发嵌入式应用 设计一个多任务并发系统 实现任务间的同步与数据共享 利用RTOS的定时器功能 常见RTOS(如FreeRTOS, Zephyr)的API实践 第三部分:嵌入式硬件接口与驱动开发 第七章:串行通信接口 UART(异步串行通信):原理、波特率、校验、数据帧 SPI(串行外设接口):主从模式、时钟极性与相位 I2C(集成电路互联总线):主从模式、地址解析、多主 第八章:并行接口与数据采集 GPIO的高级应用:输入、输出、上拉/下拉电阻 ADC(模数转换器):采样率、分辨率、参考电压 DAC(数模转换器):输出精度、电压范围 PWM(脉冲宽度调制):生成模拟信号、电机控制 第九章:设备驱动程序设计 驱动程序的层次结构:硬件抽象层(HAL)、总线驱动、设备驱动 Linux设备模型(概览):字符设备、块设备、网络设备 编写简单的字符设备驱动 总线驱动与设备树(Device Tree)的作用与基本概念 驱动程序的注册与注销 第四部分:嵌入式系统软件设计与开发实践 第十章:嵌入式软件架构与设计模式 分层架构设计:驱动层、服务层、应用层 模块化设计与接口定义 状态机模式在嵌入式系统中的应用 事件驱动编程模型 面向对象在嵌入式C/C++开发中的实践 第十一章:嵌入式Linux开发基础 嵌入式Linux开发环境搭建:交叉编译链、根文件系统 Linux内核配置与模块加载 用户空间与内核空间的交互:系统调用、/proc, /sys 文件系统 设备树(Device Tree)的深入理解与应用 嵌入式Linux下的驱动开发(字符设备,GPIO,SPI, I2C 接口的Linux驱动开发示例) 第十二章:嵌入式系统的调试与优化 调试工具:GDB, JTAG/SWD调试器, 逻辑分析仪, 示波器 代码调试技巧:断点、单步执行、观察变量 性能分析与优化:CPU占用率、内存使用、功耗优化 代码质量保证:单元测试、集成测试、静态代码分析 第十三章:嵌入式系统安全性基础 常见的嵌入式系统安全威胁 安全启动与固件更新 数据加密与安全通信(简要介绍) 访问控制与权限管理 第五部分:项目案例与前沿展望 第十四章:综合项目案例 (选择一个或两个典型项目,例如:一个简单的传感器数据采集与传输节点,一个小型嵌入式设备控制系统,展示如何整合前面章节的知识点。) 项目需求分析与系统设计 硬件选型与电路接口设计(概念性) 软件模块划分与开发 集成与调试 性能评估与优化 第十五章:嵌入式系统的未来发展趋势 物联网(IoT)中的嵌入式系统 边缘计算与嵌入式AI 安全性和可靠性挑战 新兴的硬件平台与软件技术 五、 结语 本书力求提供一套严谨、系统且实用的嵌入式系统开发指南。通过理论讲解与实践操作相结合的方式,读者将能够构建起坚实的嵌入式开发知识体系,并具备独立解决实际问题的能力。掌握本书内容,将为读者在飞速发展的嵌入式技术领域开启更广阔的职业道路打下坚实基础。