新書推薦:
《
爱丁堡古罗马史-罗马城的起源和共和国的崛起
》
售價:NT$
349.0
《
人生解忧:佛学入门四十讲
》
售價:NT$
490.0
《
浪潮将至
》
售價:NT$
395.0
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:NT$
260.0
《
日内交易与波段交易的资金风险管理
》
售價:NT$
390.0
《
自然信息图:一目了然的万物奇观
》
售價:NT$
640.0
《
女性史:古代卷(真正意义上的女性大历史)
》
售價:NT$
560.0
《
跨代伴侣治疗
》
售價:NT$
440.0
|
編輯推薦: |
《Python物联网程序设计》将教你开发物联网原型,从选择硬件到使用Python 的所有必要软件包、库和工具,应有尽有。如果你需要较小的主板或其他主板,则本书中包含的所有示例均与Intel Edison主板兼容,因此,你可以根据需要切换到该主板。
|
內容簡介: |
《Python物联网程序设计》详细阐述了与Python物联网程序开发相关的基本解决方案,主要包括了解和设置基础物联网硬件、结合使用Intel Galileo Gen 2和Python、使用Python实现交互式数字输出、使用RESTful API和脉宽调制、使用数字输入、使用模拟输入和本地存储、使用传感器从现实世界中检索数据、显示信息和执行操作、使用云、使用基于云的IoT Analytics服务分析海量数据等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
|
目錄:
|
第1章 了解和设置基础物联网硬件 1
1.1 了解Intel Galileo Gen 2主板及其组件 1
1.2 识别输入输出和Arduino 1.0引脚 7
1.3 认识额外的扩展和连接功能 11
1.4 了解按钮和指示灯 14
1.5 检查和升级主板的固件 17
1.5.1 检查固件版本 17
1.5.2 在Windows系统中更新固件 19
1.5.3 在Mac OS X系统中更新固件 20
1.6 牛刀小试 22
1.7 小结 22
第2章 结合使用Intel Galileo Gen 2和Python 23
2.1 设置主板以使用Python作为编程语言 23
2.1.1 可能需要另购的硬件 23
2.1.2 下载Yocto Linux启动镜像 24
2.1.3 在Windows系统中提取并写入镜像 25
2.1.4 在Mac OS X系统中提取并写入镜像 27
2.1.5 启动Intel Galileo Gen 2主板 30
2.2 检索主板分配的IP地址 31
2.2.1 通过路由器回收主板IP地址 31
2.2.2 使用Bonjour浏览器 32
2.3 连接到主板的操作系统 35
2.3.1 在Windows系统中安装和配置PuTTY终端 35
2.3.2 在OS X系统中通过ssh命令连接到Yocto Linux 37
2.4 安装和升级必要的库以与主板交互 39
2.4.1 检查现有库的版本 39
2.4.2 安装最新版本的库 41
2.5 安装pip和其他库 45
2.5.1 安装pip软件包管理系统 45
2.5.2 安装wiring-x86软件包 46
2.6 调用Python解释器 47
2.7 牛刀小试 48
2.8 小结 49
第3章 使用Python实现交互式数字输出 51
3.1 打开和关闭板载组件 51
3.1.1 编写点亮或熄灭LED的Python代码 51
3.1.2 使用FileZilla将Python代码文件传输到主板 52
3.1.3 在主板上运行Python代码 55
3.2 认识面包板 58
3.3 制作数字输出示例 60
3.3.1 使用电子示意图 61
3.3.2 使用LED 63
3.3.3 认识电阻 65
3.3.4 连接元器件 66
3.3.5 编写从1数到9的Python代码 67
3.3.6 测试代码 68
3.3.7 代码解释 70
3.4 编写面向对象的代码控制数字输出结果 72
3.4.1 创建一个Led类来表示连接到主板的LED 72
3.4.2 编写控制数字输出的代码 73
3.5 改进面向对象代码以提供新功能 75
3.5.1 创建NumberInLeds类 75
3.5.2 编写从0数到9的代码 76
3.6 隔离引脚编号以改善布线 76
3.6.1 优化布线方案 77
3.6.2 编写代码隔离引脚编号 78
3.7 使用wiring-x86库控制数字输出 81
3.7.1 编写Board类和新Led类的代码 82
3.7.2 修改__main__方法 83
3.8 牛刀小试 84
3.9 小结 85
第4章 使用RESTful API和脉宽调制 87
4.1 使用RESTful API以通过LED显示数字 87
4.1.1 安装Tornado 87
4.1.2 安装HTTPie 88
4.1.3 使用Tornado构建RESTful API 90
4.1.4 启动HTTP服务器 94
4.1.5 编写和发送HTTP请求 94
4.2 控制LED的亮度 99
4.2.1 关于LED亮度控制原理 99
4.2.2 连接方案 100
4.2.3 使用PWM生成模拟值 102
4.2.4 创建新的AnalogLed类 104
4.2.5 编写控制LED亮度的代码 106
4.2.6 启动HTTP服务器和RESTful API 110
4.2.7 通过HTTP请求生成模拟值 110
4.3 为Web应用程序需求准备RESTful API 113
4.3.1 编写新的PutRGBBrightnessHandler类 113
4.3.2 创建tornado.web.Application类的实例 114
4.3.3 启动HTTP服务器和新版本的RESTful API 114
4.3.4 通过HTTP请求控制LED分量的亮度 115
4.4 使用PWM和RESTful API设置RGB LED的颜色 115
4.4.1 使用RGB LED 116
4.4.2 连接方案 117
4.4.3 测试新版本的RESTful API 118
4.5 使用wiring-x86库控制脉宽调制 120
4.6 牛刀小试 121
4.7 小结 122
第5章 使用数字输入 123
5.1 了解按钮和上拉电阻 123
5.1.1 按钮 123
5.1.2 上拉电阻和下拉电阻 125
5.2 使用数字输入引脚连接按钮 127
5.2.1 连接方案 128
5.2.2 创建PushButton类表示按钮 129
5.2.3 轮询按钮是否被按下 131
5.2.4 测试轮询代码 132
5.2.5 轮询和中断的区别 133
5.3 读取按钮状态并运行RESTful API 133
5.3.1 在BoardInteraction类中添加类属性和类方法 134
5.3.2 声明tornado.web.RequestHandler的两个子类 136
5.3.3 创建tornado.web.Application类的实例 136
5.3.4 修改__main__方法 137
5.3.5 一致性测试 138
5.4 使用wiring-x86库读取数字输入 140
5.5 使用中断来检测按下的按钮 142
5.5.1 连接方案 142
5.5.2 创建PushButtonWithInterrupt类 144
5.5.3 修改BoardInteraction类 146
5.5.4 声明触发中断时要调用的函数 147
5.5.5 修改__main__方法 147
5.5.6 中断处理测试 148
5.6 牛刀小试 149
5.7 小结 150
第6章 使用模拟输入和本地存储 151
6.1 理解模拟输入 151
6.2 使用模拟输入和mraa库测量电压 153
6.2.1 连接方案 153
6.2.2 创建VoltageInput类 155
6.2.3 编写代码检索电压值 156
6.3 将光敏电阻连接到模拟输入引脚 157
6.3.1 连接方案 158
6.3.2 创建DarknessSensor类以表示光敏电阻 159
6.3.3 循环检测照明条件变化 161
6.3.4 测试 162
6.4 环境光变化时触发动作 163
6.4.1 连接方案 163
6.4.2 创建BoardInteraction类 165
6.4.3 基于环境光设置RGB LED的亮度 166
6.4.4 测试 167
6.5 使用wiring-x86库控制模拟输入 168
6.6 使用本地存储记录日志 170
6.6.1 添加日志记录功能 171
6.6.2 测试日志功能 172
6.7 使用U盘存储 173
6.7.1 连接U盘 174
6.7.2 在U盘上创建日志文件夹 176
6.7.3 修改代码中的日志路径 176
6.7.4 启动示例将日志保存到U盘 177
6.7.5 拔出U盘前的操作 177
6.8 小试牛刀 178
6.9 小结 178
第7章 使用传感器从现实世界中检索数据 181
7.1 了解传感器及其连接类型 181
7.1.1 传感器选择考虑因素 182
7.1.2 模块连接类型 184
7.1.3 关于mraa库 185
7.2 使用加速度计 186
7.3 将模拟加速度计连接到模拟输入引脚 187
7.3.1 使用模拟加速度计的分线板 187
7.3.2 连接方案 187
7.3.3 创建Accelerometer类表示模拟加速度计 190
7.3.4 编写主循环 191
7.3.5 测试模拟加速度计 192
7.4 将数字加速度计连接到I2C总线 193
7.4.1 使用数字加速度计的分线板 194
7.4.2 连接方案 195
7.4.3 创建Accelerometer类表示数字加速度计 197
7.4.4 编写主循环 199
7.4.5 测试数字加速度计 199
7.5 使用mraa库通过I2C总线控制数字加速度计 200
7.5.1 编写新的Adxl1345类 200
7.5.2 创建新的Accelerometer类 206
7.6 使用模拟温度传感器 207
7.6.1 连接方案 207
7.6.2 创建TemperatureSensor类表示温度传感器 209
7.6.3 编写主循环 210
7.6.4 测试温度传感器 211
7.7 将数字温度和湿度传感器连接到I2C总线 211
7.7.1 连接方案 212
7.7.2 创建TemperatureAndHumiditySensor类表示温度和湿度传感器 214
7.7.3 编写主循环 215
7.7.4 测试温度和湿度传感器 216
7.8 牛刀小试 217
7.9 小结 217
第8章 显示信息和执行操作 219
8.1 了解LCD显示屏及其连接类型 219
8.1.1 关于LCD显示屏 220
8.1.2 选择LCD模块时的考虑因素 220
8.2 将LCD RGB背光分线板连接到I2C总线 221
8.2.1 连接方案 222
8.2.2 创建Lcd类 224
8.2.3 创建TemperatureAndHumidityLcd子类 226
8.2.4 编写主循环 227
8.2.5 测试LCD显示 228
8.3 将OLED点阵屏连接到I2C总线 228
8.3.1 关于OLED点阵屏 228
8.3.2 连接方案 230
8.3.3 创建Oled类 231
8.3.4 创建TemperatureAndHumidityOled子类 232
8.3.5 编写主循环 233
8.3.6 测试OLED屏显示 234
8.4 连接伺服电机 234
8.4.1 通过旋转伺服电机的轴显示温度 234
8.4.2 连接方案 236
8.4.3 创建TemperatureServo类表示伺服电机 238
8.4.4 修改主循环 239
8.4.5 测试 240
8.5 牛刀小试 240
8.6 小结 241
第9章 使用云 243
9.1 使用dweepy将数据发布到云 243
9.1.1 关于dweet.io 243
9.1.2 安装dweepy 244
9.1.3 修改__main__方法 245
9.1.4 测试 247
9.2 使用Freeboard构建基于Web的仪表板 250
9.2.1 关于freeboard.io 251
9.2.2 创建Freeboard账户 251
9.2.3 创建仪表板 251
9.3 使用PubNub通过Internet实时发送和接收数据 256
9.3.1 关于MQTT和PubNub 256
9.3.2 创建PubNub账户并生成发布和订阅密钥 257
9.3.3 安装PubNub Python SDK 258
9.3.4 创建MessageChannel类 259
9.3.5 修改__main__方法 262
9.3.6 通过PubNub云发布带有命令的消息 263
9.3.7 修改MessageChannel类 268
9.3.8 测试 271
9.4 使用Python PubNub客户端将消息发布到云 273
9.4.1 创建Client类 273
9.4.2 创建__main__方法 276
9.4.3 测试客户端 277
9.5 使用Mosquitto和Eclipse Paho 279
9.5.1 安装paho-mqtt模块 280
9.5.2 创建MessageTopic类 280
9.5.3 修改__main__方法 285
9.5.4 启动代码运行 287
9.6 使用Python客户端将消息发布到Mosquitto代理 287
9.6.1 创建MQTT客户端中事件的回调函数 287
9.6.2 创建__main__方法 289
9.6.3 测试客户端 290
9.7 牛刀小试 291
9.8 小结 292
第10章 使用基于云的IoT Analytics服务分析海量数据 293
10.1 理解物联网与大数据之间的关系 293
10.2 了解Intel IoT Analytics结构 295
10.3 在Intel IoT Analytics中设置设备 297
10.3.1 使用iotkit-admin命令行 297
10.3.2 刷新激活码 298
10.3.3 查看激活的设备 300
10.4 在Intel IoT Analytics中设置组件 300
10.4.1 查看组件定义 301
10.4.2 创建新组件 302
10.4.3 注册组件的设备 303
10.4.4 检索设备令牌 306
10.5 使用Intel IoT Analytics收集传感器数据 308
10.5.1 安装requests软件包 308
10.5.2 创建IntelIotAnalytics类 309
10.5.3 修改__main__方法 313
10.5.4 运行并查看结果 314
10.6 使用Intel IoT Analytics分析传感器数据 315
10.7 使用Intel IoT Analytics中的规则触发警报 319
10.7.1 定义规则 320
10.7.2 查看规则触发的警报 320
10.8 牛刀小试 324
10.9 小结 324
各章牛刀小试答案 327
第1章 了解和设置基础物联网硬件 327
第2章 结合使用Intel Galileo Gen 2和Python 327
第3章 使用Python实现交互式数字输出 327
第4章 使用RESTful API和脉宽调制 328
第5章 使用数字输入 328
第6章 使用模拟输入和本地存储 328
第7章 使用传感器从现实世界中检索数据 328
第8章 显示信息和执行操作 329
第9章 使用云 329
第10章 使用基于云的IoT Analytics服务分析海量数据 329
|
內容試閱:
|
物联网(Internet of Things,IoT)正在改变我们的生活方式,它是IT行业最大的挑战之一。开发人员正在创造大量低成本设备,以收集大量数据,彼此交互并利用云服务和基于云的存储方案。世界各地的创客都在进行这种创造,它可以将日常物品转换为带有传感器和执行器的智能设备。
例如,咖啡杯已不再是一个简单的杯子,它可以向智能手表发送一条消息,指示其中的液体温度是否合适,这样你就可以放心饮用它而不必考虑是否太烫。如果你在收到消息之前移动了咖啡杯,则可穿戴设备会震动提示你现在还不到喝咖啡的时候。
你可以在智能手机中查看到咖啡机的咖啡豆余量,而不必担心购买了过多的咖啡豆:当咖啡机的咖啡豆余量不足时,咖啡机会提前一天自动下单购买。你只需要批准智能咖啡机建议的在线咖啡豆订单即可。根据某些统计算法,咖啡机将知道何时订购最为合适。
当有更多人来到办公室,他们的智能手表或智能手机将与咖啡机通信并下订单,以防出现咖啡不足的情况。我们有智能咖啡杯、智能咖啡分配器、智能手表、智能手机和可穿戴设备,所有这些都可以利用云来创建一个智能生态系统,为人们的工作和生活提供更大的便利。
Intel Galileo Gen 2主板是用于物联网项目的功能强大且用途广泛的微型计算机主板。我们可以启动Linux版本并轻松执行可以与主板上包含的不同组件进行交互的Python脚本。本书将教你开发物联网原型,从选择硬件到使用Python 2.7.3的所有必要软件包、库和工具,应有尽有。如果你需要较小的主板或其他主板,则本书中包含的所有示例均与Intel Edison主板兼容,因此,你可以根据需要切换到该主板。
Python是最流行的编程语言之一。它是开源和跨平台的,你可以使用它来开发任何类型的应用程序,从网站到极其复杂的科学计算应用程序均可。Python是开发完整的物联网项目的理想选择。本书涵盖了将日常对象转换为物联网项目所需的所有知识。
本书将告诉你如何使用Python语言从头开始设计和开发物联网解决方案。你将学会利用现有的Python知识来捕获现实世界中的数据,与物理对象进行交互,开发API,以及使用不同的物联网协议。你将通过特定的库轻松地使用底层硬件、传感器、执行器、总线和显示屏。最终,你将掌握如何通过Intel Galileo Gen 2主板开发有趣的物联网项目。
本书涵盖的内容
第1章了解和设置基础物联网硬件,主要介绍了Intel Galileo Gen 2主板提供的不同功能,并逐一讲解了其不同组件。本章解释了不同引脚、LED和连接器的作用。
第2章结合使用Intel Galileo Gen 2和Python,主要介绍了将Linux Yocto镜像写入microSD卡、配置主板使其引导该映像、更新库以使用其最新版本,以及启动Python解释器等操作。
第3章使用Python实现交互式数字输出,重点介绍了如何使用两个不同的库来控制Python中的数字输出:mraa和wiring-x86。我们将把LED和电阻器连接到面包板上,并编写代码以打开0至9个LED。此外,本章还改进了Python代码以利用其面向对象功能。
第4章使用RESTful API和脉宽调制,介绍了使用Tornado Web服务器、Python、HTTPie命令行HTTP客户端以及mraa和wiring-x86库。本章生成了多版本的RESTful API,以便在连接到局域网的计算机和设备中与主板交互。
第5章使用数字输入,介绍了通过轮询读取按钮状态与使用中断之间的区别。本章将编写代码,使用户可以通过主板上的按钮或HTTP请求执行相同的操作。
第6章使用模拟输入和本地存储,介绍了如何使用模拟输入来测量电压值。本章使用模拟引脚以及mraa和wiring-x86库来测量电压,通过实例演示了将可变电阻转换为电压源,并使用模拟输入、光敏电阻和分压器来测量照明。当环境光线变化时,将触发动作,同时使用模拟输入和输出。
第7章使用传感器从现实世界中检索数据,介绍了使用各种传感器从现实世界中检索数据。本章利用了upm库中包含的模块和类,同时使用了模拟和数字传感器。
第8章显示信息和执行操作,介绍了通过I2C总线连接到开发板的不同显示。本章先是使用带RGB背光的LCD显示屏制作示例,然后又替换使用了OLED点阵屏。此外,本章还编写了与模拟伺服电机交互的代码。
第9章使用云,介绍了如何结合基于云的服务,这些服务使开发人员能够轻松发布从传感器收集的数据,并在基于Web的仪表板上可视化它们。本章使用了MQTT协议及其发布订阅模型、与MQTT协议底层的PubNub云、Mosquitto和Eclipse Paho等。
第10章使用基于云的IoT Analytics服务分析海量数据,阐释了物联网和大数据之间的紧密关系,并介绍了如何使用Intel IoT Analytics REST API进行交互。本章还介绍了IoT Analytics提供的用于分析大数据的不同选项,并定义了触发警报的规则。
充分利用本书
为了使用不同工具连接到Intel Galileo Gen 2主板并实现Python示例,你需要配置有Intel Core i3或更高CPU和至少4 GB RAM的计算机。此外,你可以使用以下任何操作系统:
Windows 7或更高版本(Windows 8、Windows 8.1或Windows 10)。
Mac OS X Mountain Lion或更高版本。
任何能够运行Python 2.7.x的Linux版本。
任何具有JavaScript支持的现代浏览器。
你还需要一块Intel Galileo Gen 2主板和一个面包板,面包板要求带有830个连接点(用于连接的孔)和两条电源轨。
此外,你还需要不同的电子元器件和分线板来制作本书包含的示例。本书在具体的章节中提供了对这些元器件和分线板的详细介绍。
本书适合的读者
本书非常适合想探索Python生态系统中的工具以构建自己的物联网项目的Python程序开发人员。具有创作和设计背景的人们也会发现这本书的有用之处。
本书约定
在本书中,你将看到许多不同的文本样式。以下是这些样式的一些示例以及对其含义的解释。
(1)在界面词汇后面使用括号附加对应的中文含义,方便读者对照查看。以下段落就是一个示例:
初始视图将显示Details(详细信息)选项卡。如果Activation Code(激活码)包含代码已过期(Code Expired)字样,则意味着激活码不再有效,必须单击Activation Code(激活码)文本框右侧的刷新图标(第二个带有两个箭头的图标)。
(2)代码块显示如下:
if __name == "__main__":
print "Mraa library version: {0}".formatmraa.getVersion
print "Mraa detected platform name: {0}".formatmraa.
getPlatformName
number_in_leds = NumberInLeds
# 从0到9计数
for i in range0, 10:
number_in_leds.print_numberi
time.sleep3
(3)当我们希望引起你对代码块特定部分的注意时,相关的行或项目将以粗体显示:
class NumberInLeds:
def __init__self:
self.leds = []
for i in range9, 0, -1:
led = Ledi, 10 - i
self.leds.appendled
def print_numberself, number:
print"==== Turning on {0} LEDs ====".formatnumber
for j in range0, number:
self.leds[j].turn_on
for k in rangenumber, 9:
self.leds[k].turn_off
(4)新术语和重要单词以中英文对照的形式表示,中文在前:
我们可以轻松识别出主板上出现的许多标签,它们是符号中每个连接器的标签。Fritzing使我们可以轻松使用面包板(Breadboard)和电子示意图。
图标旁边的文字表示警告或重要的信息。
图标旁边的文字表示提示或技巧。
下载示例代码文件
读者可以从www.packtpub.com下载本书的示例代码文件。具体步骤如下:
(1)登录或注册www.packtpub.com。
(2)选择Support(支持)选项卡。
(3)单击Code Downloads & Errata(代码下载和勘误表)。
(4)在Search(搜索)框中输入图书名称Internet of Things with Python,然后按照界面上的说明进行操作。
下载文件后,请确保使用最新版本解压缩或解压缩文件夹:
? WinRAR7-Zip(Windows系统)。
? ZipegiZipUnRarX(Mac系统)。
? 7-ZipPeaZip(Linux系统)。
该书的代码包也已经在GitHub上托管,网址如下,欢迎访问:
https:github.comPacktPublishingInternet-of-Things-with-Python
如果代码有更新,也会在现有GitHub存储库上更新。
下载彩色图像
本书还提供了一个PDF文件,其中包含书中屏幕截图图表的彩色图像,可以通过以下地址下载:
https:www.packtpub.comsitesdefaultfilesdownloadsInternetofThingswithPython_ ColorImages.pdf
关于作者
Gastn C. Hillar是意大利人,从8岁开始就学习计算机。20世纪80年代初,他开始使用传奇的Texas TI-994A和Commodore 64家用计算机进行编程。他拥有计算机科学学士学位(以优异的成绩毕业)和MBA学位(以出色的论文毕业)。目前,Gastn是一名独立的IT顾问和自由作家,他一直在全球范围内寻找新的机会。
他一直是Dr. Dobbs Journal电子杂志的资深特约编辑,并撰写了一百多篇有关软件开发主题的文章。Gastn还是技术计算方面的微软MVP。他7次获得享有盛誉的Intel Black Belt Software Developer奖。
他是Intel Software Network(http:software.intel.com)的特邀博主。他的电子邮箱是gastonhillar@hotmail.com,博客是http:csharpmulticore.blogspot.com。
他与妻子Vanesa和两个儿子Kevin和Brandon住在一起。
致谢
在撰写本书时,我很幸运地能与Packt Publishing Ltd的优秀团队一起工作,他们的贡献极大地改善了本书的呈现方式。Reshma Raman给了我机会,我提出了编写本书的想法,然后我就投入了一个激动人心的项目,教授如何将电子组件、传感器、执行器、Intel Galileo Gen 2主板和Python组合在一起,以创建令人兴奋的物联网项目。Divij Kotian帮助我完善了对本书的构想,并针对文本、格式和流程提供了许多聪明的建议。在此还要感谢技术审核人员和校对人员的全面审核和有见地的评论。这本书之所以成为可能,正是因为他们提供了宝贵的反馈意见。
特别要感谢我的父亲Jos C. Hillar,他在很早时就向我介绍电子产品。我在晶体管、电阻器和烙铁的陪伴中长大。他对电子组件、微控制器和微处理器的发展有着清晰的认知和理解,这也使我得以熟悉和了解构建物联网项目所需的一切。他还和我一起测试了本书中包含的所有示例项目。
与英特尔开发人员社区的众多专家的良好互动使我熟悉了Intel Galileo平台,多年以来对英特尔开发者论坛的访问也使我了解了开发人员要成功创建现代物联网项目必须掌握的所有内容。特别感谢Kathy Farrel和Aaron Tersteeg,因为正是在加利福尼亚州旧金山与他们的多次交流,启发了我撰写本书的想法。
写书的过程既漫长又寂寞,好在有我的儿子Kevin和Brandon以及侄子Nicolas陪着我一起踢足球消遣。虽然我从来没赢过一场比赛,但是我确实有进球。
关于审稿者
Navin Bhaskar在嵌入式系统方面拥有4年以上的经验,编写了从设备驱动程序到智能卡固件在内的众多代码。他的嵌入式系统可重构计算项目在嵌入设计挑战赛中获得了杰出优胜奖。在OpenWorld竞赛中,他的EvoMouse赢得了三等奖。
他的博客是https:navinbhaskar.wordpress.com,在其中可以找到有关物联网和相关主题的教程。
|
|