开发者学堂课程【HaaS 物联网云端一体低代码开发课程:《物联网基础知识和 Python 开发基础》 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/810/detail/13906
《物联网基础知识和 Python 开发基础》
目录
一、 物联网是什么
二、 物联网应用场景概览
三、 物联网操作系统介绍
四、 物联网通信协议介绍
五、 HaaS EDU 开发板介绍
六、 Python 语言知识
一、物联网是什么
1.物联网的定义
物联网( The Internet of Things,简称 IoT ),即”万物相连的互联网“。
通过各种传感器技术、射频识别技术( RFID )、全球定位系统( GPS ,北斗等)、激光扫描等各种装置与技术,采集物体的温湿度、声音、光学信号、力学、化学、生物特征及位置等各种信息,通过网络连接实现对物体的智能化感知、识别和管理,从而实现物与物、物与人的信息交换和共享。
1.世界信息产业发展的第三次浪潮
2.互联网基础上的延伸和扩展
3.数以亿计的物联网设备已经被广泛部署
4.据预测,到2025年,千亿级别物联网设备
5.物联网+大数据+云计算+人工智能,加速实现物理世界的数字化和智能化
2.物联网的层次
二、物联网应用场景概览
物联网产业的几种场景概括:
智能家居:智能灯、智能空调、智能摄像头、智能门锁、踢脚线感应灯等;
智慧城市:智能路灯、智能红绿灯、车载系统、智能摄像头等;
智慧能源;
车联网;
智能物流;
智能安防;
智能医疗;
智能制造:MES 系统、HMI 屏、智能工控等;
智慧零售:便利店、无人零售柜、菜鸟驿站等;
智慧农业:野生动物保护、智能养蜂等。
三、物联网操作系统介绍
1.操作系统分类
桌面操作系统 |
移动操作系统 |
物联网操作系统 |
Windows |
Android |
uC/OS、FreeRTOS |
Mac Os |
ios |
AliOs Things、LiteOS |
ubuntu |
Chrome OS |
…… |
2. 物联网操作系统定义
Ø 定义︰提供物物相连能力的操作系统,运行在 IoT 设备上
Ø 核心∶能够将各种物体连接到互联网,并为各种物体提供数据通信能力
Ø uC/Os,FreeRTOS,LiteOS,AliOS Things,ThreadX,Android Things,mbedOs,...
3.介绍FreeRTOS:
Ø 简单、轻量、可靠性好、可移植性好
Ø Amazon FreeRTOS 设备可以直接连接到 AWS ToT Core 等云服务,也可以连接到 AWS Greengrass 等本地边缘服务
Ø 缺少对外设接口定义,对文件系统支持相对较弱
Ø 策略: MIT License ,开源、免费,适用于任何商业/非商业场合
Amazon FreeRTOS 操作系统框图
4.介绍 Linux:
a) 定义:
人们通常所说的 Linux 是指 Linux 内核,但只有内核并不是一个完整的操作系统。实际上,Linux 是一套开放源代码、可以自由传播的类 Unix 操作系统。它是一个基于 POSIX 的多用户、多任务并且支持多线程和多 CPU 核心的操作系统。
Linux 系统= Linux 内核+ GNU 项目组件+应用程序(数据库、网络、图形界面、音视频等等)
b) Linux 在物联网领域的应用:
在国内物联网操作系统得到大量应用之前, Linux 应该是物联网应用中使用最广泛的操作系统了。 Linux 系统一般都比较大,为了适应物联网领域的应用场景,很多开源组织和商业公司对 Linux 进行裁剪,RT Linux 和 uClinux 是两个比较有代表性的基于 Linux 的物联网操作系统。
RT Linux |
uClinux |
降低 Linux 内核默认任务的优先级 |
派生自 Linux 2.0/2.4 |
提高物联网应用程序的任务优先级 |
专为没有 MMU 的 CPU 进行裁剪和优化 |
5.LiteOS
华为2015年 BSD-3 开源许可 鸿蒙 OS 内核选择之一
智能家居、个人穿戴、车联网、城市公共服务、制造业等领域
6.Alios Things
Apacne 2.0 协议
云端一体化 IoT 基础设施关键能力:
Ø 极致性能
Ø 极简开发
Ø 云端一体
Ø 丰富组件
Ø 安全防护
在智能家居、智慧城市、智慧园区、智能安防、智能制造、智慧农业、人工智能等领域涉猎。
7.AliOS Things 3.3
Ø 更易用的轻应用开发
JavaScript 和 Python,无需搭建环境、编译、烧写
不依赖嵌入式软件技术栈,调用简洁的 API 即可操控硬件行为
支持一键热更新推送应用代码到硬件,极致开发体验
Ø 更易用的开发调试工具
图形化完整支持开发编译调试烧录全流程,提供易用性
重构构建系统,使用更先进直观的 yaml 方式编译脚本
智能串口工具 SmartTrace V1.4
Ø 更丰富的积木方案
解决方案中心
硬件积木
软件积木
Ø 更易用的文档库
每个案例和组件的使用方式
内核开发指南
API 用户手册等等
四、物联网通信协议介绍
1. 物联网常用应用层协议
a). MQTT ( Message Queuing Telemetry Transport,消息队列遥测传输)
最早由 IBM 开发的,专门为计算能力有限,工作在低带宽,不可靠网络的控制设备进行通信而设计的
基于 TCP/IP 常连接,开销小,支持 QoS
基于基于主题(( Topic )的订阅/发布模式,支持多对多的协议
b). COAP ( Constrained Application Protocol,受限制的应用协议)
基于 UDP ,采用请求响应(类 http )的工作模式
无连接,只支持一对一
一般来说,IoT 设备与云端通信用用 MQTT 协议的多一些,局域网通信一般采用CoAP 协议。
2. 物联网网络接口层常用协议
按照传输距离的远近可以分为低功耗广域网和低功耗局域网。
低功耗广域网:4G,LoRa,NB-IOT 等
低功耗局域网:WIFI、蓝牙、ZTB、红外等
五、HaaS EDU 开发板介绍
在无须外接任何外设的情况下,提供了10个精心打造的场景式开源案例每一个都是不同的知识点,寓教于乐,在边玩的过程中就能将知识点学习了。
六、Python 语言基础知识
WHY Python:简单易用、有成熟的社区、大量优秀的库和框架、多领域应用
Python 轻应用基础–变量
变量赋值
#直接赋值
chapter = 1
name = "Haas"
time = 12.3
binnum = 0b1111000
#连续赋值
chapter = name = time = 1
print(name)
chapter, name,time = 1,"Haas", 12.3
print(nmae)
变量类型:
Ø Numbers 数字
Ø List 列表
Ø String 字符串
Ø Tuple 元组
Ø Dictionary 字典
Number:
t_int = 12
type(t_int)
<class 'int'>
type(12)
<class 'int'>
type(12.3)
<class 'float'>
t_complex = complex(1.2,3.4)
type(t_complex)分
<class 'complex'>
List:
#初始化方法
t_list = [1,2,3,4,5]
print(t_list)
[1,2,3,4,5]
#另一种初始化方法t_list = [0]* 5
t_list
[0,0,0,0,0]
#复杂类型数组
t_list = [2,'*',0.5,'equals to ',1.0]
t_list
[2,'*',0.5, 'equals to', 1.0]
#数组操作
##索引
t_list[2]
#数组首个元素index=0
0.5
t_list[-1]
#数组最后的元素index=-1
1.0
##截取
t_list[2:4]
[0.5,"笔quals to ']
#挂#下面的可能比较难理解
t_list[-4:-2]
[ '*',0.5]
t_list[-2:-4]
#注意 index 顺序
[]
t_list[1:]
['*',0.5,'equals to ', 1.0]
##拼接
t_list + t_list[1:3]
[2,'*',0.5,'equals to',1.0,'*', 0.5]
t_list*2
[2,'*',0.5,'equals to',1.0,2,'*',0.5,'equals to ',1.0]
# List 函数&方法
##取一个正常的列表
t_n_list =[1,2,3,4,5]len(c)
5
max(t_n_list)
5
min(t_n_list)
0
##需要相同类型的列表元素,如单纯的 Number,String 数组
t_list = [2,'*',0.5,'equals to ',1.0]
max(t_list)
#Traceback (most recent calllast):
#File "<stdin>" , line 1, in<module>
#TypeError: can't convert 'int'object to str implicitly
#在列表末尾添加新的对象t_n_list.append(5)t_n_list
[1,2,3,4,5,5]
#统计某个元素在列表中出现的次数
t_n_list.count(5)
2
#将对象插入列表
t_n_list.insert(4,3)
t_n_list
[1,2,3,4,3,5,5]
#从列表中找出某个值第一个匹配项的索引位置
t_n_list.index(3)
2
#移除列表中某个值的第一个匹配项
t_n_list.remove(3)
[1,2,4,3,5,5]
#移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
t_n_list.pop()t_n_list
[1,2,4,3,5]
t_n_list.pop(2)
4
t_n_list
[1,2,3,5]
#在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
t_n_list.extend( [4,7,6,9,8])
t_n_list
[1,2,3,5,4,7,6,9,8]
t_n_list.reverse()
t_n_list
[8,9,6,7,4,5,3,2,1]
#对原列表进行排序
t_n_list.sort()
t_n_list
[1,2,3,4,5,6,7,8,9]
String:
t_string = "welcome to Haas"
len(t_String)
#字母个数
>>>15
t_String += ':3'
t_String
>>> "welcome to Haas :3'
t_String[11:15]
>>> "Haas'
Tuple:
t_tuple = (2,'*',0.5,'equals to' ,1.0)
t_list = [2,'*',0.5,'equals to' ,1.时
t_list[0] =1t_tuple[0] = 1
Traceback (most recent call last):
File "<stdin>", line 1,in
<module>
TypeError: 'tuple' object does not
support item assignment
Dictionary:
t_dict = { ' key ' : 'value' , 'list' : [1,2,3]}
t_dict[1]
Traceback (most recent call last):
File "<stdin>", line 1,in
<module>
KeyError: 1
t_dict [ ' key ' ]
>>> 'value'
#输出所有键
t_dict.keys()
>>>dict_keys( ['key' , 'list'])
#输出所有值
t_dict.values()
>>> dict_values( ['value', [1,2,3]])
运算:
算术运算
a = 37
b = 16
#+一*/%
#小数除法
a / b
>>>2.3125
#整数除法 a ll b
>>> 2
a % b
>>> 5
#幂运算
a** b
>>>12337511914217166362274241
#运算并赋值
a**=b
a
>>>12337511914217166362274241
位运算:
bin_a = 0b11110000
bin_b = 0b10101010
print(bin_a, bin_b)
>>>240170
bin(bin_a [ bin_b)
>>>8b11111010
bin(bin_a & bin_b)
>>>0b10100000
bin(bin_a ^ bin_b)
>>>0b1011010
bin(~bin_a)
>>> -0b11110001
bin(bin_a << 4)
>>>0b11110000000o
成员运算:
t_list = [2,‘*',0.5,"equals to' ,
1.0]
2t_list
>>> True
2 not in t_list
>>> False
条件语句:从这里开始,要介绍 Python的tab 缩进方法
cur_time = 12.3
time = 45
if(cur_time > time):
print("class off")
elif(cur_time < time):
print("class on")
else:
print("Schrodinger's class")
循环语句:
while:
i = 0
while(i < 10):
i +=2
if(i < 3):
continue
if(i > 9):
break
print('i = ', i)
for:
#for 本身的迭代器
for i in [1,2,3,4,5]:
print( 'i = ', i)
#range方法
for i in range( 10):
if(i < 3):
continue
if(i > 8):
break
print( 'i = ', i)
函数:
#定义函数
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0,n-i-1):
if(arr[j] > arr[j+1]):
arrljl,arr[j+1] =
arr[j+1], arr[j]
return arr
#调用函数
random_arr =
[5,6,3,4,1,2,3,9,0,2,4,5,7]
bubble_sort( random_arr)
>>>[0,1,2,2,3,3,4,4,5,5,6,7,9]