既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
| 提供生产支持 | Ruff |
1. 在硬件上运行JavaScript
espruino
- 网站 https://www.espruino.com/
- 目标 在单片机上运行 JavaScript
- 代码风格 类似于 C
- 其它 解释器、操作系统、程序库混为一谈
示例:灯不断亮灭
function toggle() {
on = !on;
digitalWrite(LED1, on);
digitalWrite(LED2, !on);
}
espruino本身不支持的硬件很难移植上去。
jerryscript(三星)
- JerryScript 是三星打造的一款 JavaScript 引擎,它可以运行在 64K 的 MCU 上
- 对于 JavaScript 标准支持得比较好
- 完整支持 ECMAScript 5.1
- 只是一个独立的JavaScript解释器
-
IoT.js
- 网站 http://iotjs.net/
- 目标 基于JerryScript 的 Node.js
- 代码风格 符合今天主流的代码风格
- 模块 支持 Buffer、net、timer 等标准模块
一段IoT.js示例
var i2c = require('i2c');
var wire = new i2c(0x23, {device: '/dev/i2c-1'});
wire.scan(function(err, data) {
...
});
2. 面向应用的抽象
名称 | 项目网站 | 开发板 | JS 引擎 | 使用领域 |
---|---|---|---|---|
Tessel | https://tessel.io/ | 自己的开发板 | Node.js | IoT、机器人 |
Jonny-Five | http://johnny-five.io/ | 适配多种开发板 | Node.js | IoT、机器人 |
Cylon.js | https://cylonjs.com/ | 适配多种开发板 | Node.js | IoT、机器人、物理计算 |
在PC上运行Nodejs引擎。
Tessel
示例:
var tessel = require('tessel');
var ambientlib = require('ambient-attx4');
var WebSocket = require('ws');
var ambient = ambientlib.use(tessel.port['A']);
var ws = new WebSocket('ws://awesome-app.com/ambient');
ws.on('open', function () {
setInterval(function () {
ambient.getSoundLevel(function(err, sdata) {
if (err) throw err;
sdata.pipe(ws);
})
}, 500);
});
通过getSoundLevel屏蔽了底层接口。
Jonny-Five
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(13);
led.blink(500);
});
Cylon.js
var Cylon = require("cylon");
Cylon.robot({
connections: {
arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
},
devices: {
led: { driver: 'led', pin: 13 }
},
work: function(my) {
every((1).second(), function() {
my.led.toggle();
});
}
}).start();
3. Ruff
'use strict';
$.ready(function(error){
if(error){
console.log(error);
return;
}
$('#led-r').turnOn();
});
$.end(function(){
$('#led-r').turnOff();
});
一、物联网架构
- 后台服务 Java、Go、Python
- 硬件端 汇编、C、C++,VHDL,verilog
- 手机应用 Java、Objective-C/Swift
- Web 界面 JavaScript,html,typescrit,AngularJs
- 桌面应用 C#、C++
二、One JavaScript
Arduino示例
1、后端
传统的:
MQTT Server、HTTP Server、CoAP Server,
基于Pub/Sub
Serverless:
应用程序明显或充分地依赖第三方应用或服务来管理服务器端逻辑和状态。
示例:
https://github.com/awslabs/lambda-refarch-iotbackend
2、应用层
应用框架:
Electron + WebView = 桌面应用
Cordova + WebView = 混合应用
微信小程序
PWA
React Native
3、硬件及协调层
硬件层
协调层
一、物联网应用的架构和数据链路
二、MQTT及示例应用开发
基于publish-subscribe模式。
demo代码下载
https://github.com/coolnameismy/javascript-mqtt-demo-wearingTip
先启动broker。
1. client
- src/temperature/index.js 基于mqtt.js实现,可以移植到主流开发板对接传感器实现真实功能
- src/temperature/iot_index.js 基于阿里云iothub产品,对index.js进行转译,具体可以阅读文件注释
2. broker
- src/broker/index.js 基于mosac实现的一个mqtt的broker服务
3. server
- src/server/index.js 基于mqtt.js订阅数据,处理业务
4. app
- 使用koa和mqtt.js,通过web展示数据提示
三、常见的js开发板介绍
1. 树莓派
基于ARM的微型计算机,基于linux。
2. Ruff
Ruff是一个JavaScript 运行时,专为硬件开发而设计。Ruff对硬件进行了抽象,使用了基于事件驱动、异步I/O的模型,使硬件开发变得轻量而高效。
3. Node MCU
- wifi,wifi+蓝牙
- 价格便宜的单片机
- 可以作为mqtt client
- 可扩充传感器
- 配合mongoose OS使用
- 更方便
Mongoose OS
四、阿里云iot产品- iot物联网套件
一、前言
物联网端到端模型
物联网与互联网差异
- 开发环节:物联网增加了设备相关的设备域开发;
- 人机交互:没有标准显示组件,不支持现有UI组件,需要NUI、智能传感器
- 接入协议:设备能力受限,需要支持MQTT/CoAP/TCP/UDP套接字;
- 安全特性:设备能力受限,无法支持RSA2048算法TLS;
- 数据特点:物联网上传流入流量远远大于流出流量;
- 实时要求:物联网隐含实时要求,流入数据需要支持实时检索、处理、统计;
- 规模受限:物联网应用规模受限于设备接入数量,资金、库存、生产、销售压力更大;
- 沉没成本:物联网是重资产业务,互联网是轻资产业务;
- 生命周期:硬件设备是生命周期要远远长过互联网产品;
- 团队组成:硬件团队与互联网团队文化融合。
二、 Python 与IoT全栈开发
Python是物联网系统的胶水语言。
- Python有许多实现(Implementations),能够与多种语言进行交互,尤其适合系统整合
- CPython与C/C++:通用计算加速、DLL二次开发、设备驱动、桌面、Web、运维、脚本
- Jython与Java/JVM:大数据,GUI、网关、移动APP
- IronPython与C#:Windows应用、DLL二次开发、系统整合
- JavaScript:前端、Web可视化、JS爬虫
- 嵌入式C/HDL:寄存器/晶体管级原型开发、固件、DSP、GPU、NLP、机器学习
- From Chip to Cloud,完整产业链的全栈开发,通用语言的综合优势
主要领域
- 系统建模、虚拟仪器、软件质量、自动测试、报文分析、网络仿真、媒体处理
- 系统建模:blender,printrun,python-opengl
- 虚拟仪器:SCPI,pyserial,socket
- 软件质量:unittest,pytest,pydoc,Sphinx,git/subversion
- 自动测试:pyocd,mbed-ls
- 报文分析:Wireshark/PyShark
- 媒体处理:mp3play,pyglet,moviepy,字模提取
Python性能加速
- 运行时加速:PyPy JIT加速
- Web加速:libev/libuv的Python封装pyev/pyuv
- 硬件加速:CUDA GPU加速
开箱即用的Python物联网
- PySerial:实验性的RFC2271/asyncio
- Twisted/Tornado:支持socket/websocket异步网络编程框架
- MQTT-client/paho:支持Cyclone/Tornado/Flask/Django框架
- CoAP-proxy/txThings:支持Twisted框架
三、设备端开发与选型
1. 需求分析
- 电子货架标签:短距离无线、类广播式
- 资产定位:广域无线、低占空比、数据采集、异步事件
- 农业应用:低功耗广域无线、低占空比、数据采集、多设备融合
- 房屋租赁:WiFi/BLE、低占空比、安全相关、异步事件、多设备融合
- 医疗设备:WiFi/BLE、高速率、数据采集、异步事件、多设备融合
2. 设备组网与联网选型
- 无线技术需要遵守当地法律法规
- 蜂窝数据技术 vs ISM技术
- Sub-1GHz vs 2.4GHz技术
- 短距无线电 vs 低功耗广域技术
- 无线技术标准竞争与多模芯片融合
- 传统有线网络依然有现实意义
四、Python设备端开发
具备二次开发能国的可编程设备
五、Python网关开发
1. 硬件接口标准化
- 物联网现状:碎片化,垂直行业条块分割
- 物联网趋势:标准化硬件接口 + 标准化编程接口 + 标准化编程平台
- 应用迭代:唯快不破,以标准化方法应对碎片化需求
- 标准化进行中:I2C/SPI/GPIO/ADC/PWM…… Adafruit GPIO/Intel MRAA
- UART:PySerial
- USB:PyUSB
- OS标准设备:SDIO/MiniPCIe/HDMI/Audio……
2. 操作系统标准化
- MCU:ARM mbed OS/CMSIS RTOS
- CPU/MPU:Linux Yocto/Open-Embedded/Debian/Ubuntu
- 运行时:Native/JVM/Android
- 编程语言:C/C++/Java/Python/JavaScript/Lua
- I/O命名:Arduino/ARM mbed
3. 编程接口标准化
- PySerial:RS232/RS485/USB CDC ACM/RFC2271
- PyUSB:特种USB设备,HID/CDC/MSD等设备均被OS标准化
- Socket:连接接口或技术标准化后会提供套接字编程接口,包括CAN/6LowPAN/Zigbee
- 设备文件:Linux的标准化接口
- DLL文件:Windows下的标准接口
Linux+Python 物联网网关示例
- panStamp:西班牙智能农业,已成为通用物联网网关
- panStamp模块:Sub-1GHz CC1101,基于Arduino API,UART接入树莓派Linux
- panStamp架构:分布式,包括IFTTT,Web管理界面,与众多云服务整合
- 嵌入式Linux:CLFS,预编译Linux,完整版Linux
- 交叉编译:CLFS与CPython交叉编译问题
- 其他网关:LoRa/Zigbee/6LowPAN网关
MicroPython物联网网关
- 基于MicroPython的物联网参考设计
- 交叉编译:MicroPython更适合交叉编译环境
- 生态完整:MicroPython自带upip和微型库
- 参考设计:WiPy/LoPy/SiPy/FiPy,重复整合LTE/NB/WiFi/BLE/LoRa/Sigfox网关服务
- 开发者反馈:远比C/C++开发要快捷,充分发挥了Python快速应用开发的特点
- 开发者编程水平:残留大量C语言编程方式,需要掌握Python语法,OOP/函数式编程,中断回调和异步I/O,实现个人编程能力的升级
* Java OSGI+JyThon物联网网关*
- OSGi:历史悠久,OpenHab及大量OSGi开源框架与网关
- JSR223:JavaScript/Python/AWK/Groovy等十多种语言
- OSGi Jython桥接
- 参考设计:NXP/Freescale的OSGi网关设计
- 树莓派:Pi4J、TigerJython
六、 Python服务器端开发
1. 典型物联网服务器端框架:
2. 联网协议选型
- MQTT vs TCP长连接:完整的分层协议与TLS安全
- CoAP vs MQTT:REST无状态与消息队列模式
- XMPP/Websocket等:相对重型的通讯协议
- 技术陷阱:基于TCP长连接的二进制协议定制,可能导致工程失败
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
HVuZGg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2. 联网协议选型
- MQTT vs TCP长连接:完整的分层协议与TLS安全
- CoAP vs MQTT:REST无状态与消息队列模式
- XMPP/Websocket等:相对重型的通讯协议
- 技术陷阱:基于TCP长连接的二进制协议定制,可能导致工程失败
[外链图片转存中…(img-imlPXaBc-1715708615681)]
[外链图片转存中…(img-jLPaTLU1-1715708615681)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新