物联网系统集成
Posted 流星蝴蝶没有剑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网系统集成相关的知识,希望对你有一定的参考价值。
1. 简述物联网的体系架构及各层次的功能。
感知层:感知主要是对生物世界和物理世界的数据进行采集
网络层:建立互联网通信,主要是解决感知层的数据进行长距离传输问题
应用层:针对用户的需求将数据进行可视化,对接API等,实现数据的智能应用。
2. 简述物联网系统常用单片机特点及用途。
- 51 系列单片机
特点:支持乘法除法指令
片内RAM区间开辟了一个双重地址区间
支持位的逻辑运算。
用途:教学毕设等
- PIC 系列
特点:低耗、低电压、驱动能力强,支持在线调试,可直接驱动数码管
用途:消费电子产品,智能仪器仪表,汽车电子,金融电子,工业控制不同领域都有广泛的应用。
- STM32单片机
特点:高性能、低成本、低功耗,更多的IO接口、更高的主频、更丰富的功能。
用途:无人机、机器人、门禁、智能小车等。
3. 请使用类的多态性机制,编写一个程序,实现鸟能飞翔,鱼会游泳、狗会奔跑。
class It(object):
def who(self):
print("鸟能飞翔")
class She(object):
def who(self):
print("鱼会游泳")
class He(object):
def who(self):
print("狗会奔跑")
def who(obj):
obj.who()
it,she,he = It(),She(),He()
who(it)
who(she)
who(he)
4. 在面向对象的程序开发中,常使用多继承机制,请使用该机制编写一个程序。
# -*-coding:utf-8-*-
#!/usr/bin/python
import time
class Barber(object):
'''
功能:会理发
'''
__ability = ''
__time = '0000-00-00 00:00:00'
def __init__(self):
time.sleep(1)
print("2. 开始教理发***")
super().__init__()
time.sleep(1)
print("5. 教会理发***")
self.__ability = '理发'
self.__time = (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
def getAbility(self):
return self.__ability
def getTime(self):
return self.__time
class Driver(object):
'''
功能:会开车
'''
__ability = ''
__time = '0000-00-00 00:00:00'
def __init__(self):
time.sleep(1)
print("3. 开始教开车###")
super().__init__()
time.sleep(1)
print("4. 教会开车###")
self.__ability = '开车'
self.__time = (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
def getAbility(self):
return self.__ability
def getTime(self):
return self.__time
class Double(Barber, Driver):
'''
功能:会理发和开车
'''
__ability = ''
def __init__(self):
print("1. 开始学习---")
super().__init__() # supper 会进入Barber【取决于继承的顺序 Barber、Driver】
print("6. 学习结束+++")
self.__ability += Barber.getTime(self) + ": " + Barber.getAbility(self)
self.__ability += '\\n'
self.__ability += Driver.getTime(self) + ": " + Driver.getAbility(self)
def talk(self):
print(self.__ability)
# 先学理发,在学开车
# 先学会开车,后学会理发
print("规划学习路径")
print(Double.mro())
dd = Double()
print("7. 查看学习效果:")
dd.talk()
5. 并发事件是现实生活最常见的现象,请使用python语言编写一个处理并发事件的程序。(要求提交程序原码,和关键截图)
# -*-coding:utf-8-*-
#!/usr/bin/python
import threading
import time
# 多线程
class T1(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
print("线程1")
def run(self):
def addNum():
for i in range(1, 20):
print("i: %d" % i)
go = threading.Thread(target=addNum)
go.start()
class T2(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
print("线程2")
def run(self):
for i in range(1, 20):
print("i: %d" % i)
t1 = T1()
t2 = T2()
t1.start()
t2.start()
6. 请使用python语言编写一个tcp通信客户端程序,要求提交程序原码、测试过程关键截图。
#coding: utf-8
# 客户端
import socket
import threading
import configparser
import os
inString = outString = nick = ''
# 发送转码消息
def sendChat(sock, s):
sock.sendall(s.encode("utf-8"))
# 接收转码消息
def recvChat(sock):
return sock.recv(1024).decode("utf-8")
# 发送消息
def sends(sock):
global nick, outString
while True:
outString = input()
outString = nick + ': ' + outString
sendChat(sock, outString)
# 接收消息
def waits(sock):
global inString
while True:
try:
inString = recvChat(sock)
if not inString:
break
if outString != inString: # 如果不是自己发送的消息
if inString.find(outString) == 0:
inString = inString.replace(outString, "\\n", 1)
else:
inString = inString.replace(outString, outString+ "\\n", 1)
print ("\\n" + inString + "\\n我: ", end="")
else:
print ("\\n我: ", end="")
except:
break
if __name__ == "__main__":
configDat = configparser.ConfigParser()
file_path = os.path.abspath(os.path.dirname(__file__)) + '\\config.ini'
configDat.read(file_path, encoding='utf-8')
HOST = configDat.get('server', 'host')
PORT = configDat.getint('server', 'port')
nick = input("请输入您的昵称: ")
print("您正在申请加入群聊")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 申请账户
sock.connect((HOST, PORT)) # 申请加入群聊
# 发生呢称
sendChat(sock, nick)
print("您已经加入群聊,开始聊天吧")
# 监听发送接收
threading.Thread(target = waits, args = (sock,)).start()
threading.Thread(target = sends, args = (sock,)).start()
#sock.close()
7. 请使用python语言编写一个tcp通信服务端程序,要求提交程序原码、测试过程关键截图。
服务器:
#coding: utf-8
# 服务器开启聊天服务
# 监听多个客户端聊天
# 服务端作为机器人
# 讲客户端的消息转发到多个客户端
# 监听指定的回复
# 安装 requests 取消注释62-67 行代码
# Python3
import socket
import sys
import threading
import requests
import configparser
import os
con =threading.Condition() # 方便 多线程访问共享数据时加锁和释放锁
data = ''
info = [
{"msg":"群主信息", "remsg":"201817020085 文轩 男 物联网一班"},
{"msg":"大家好", "remsg":"欢迎您加入"},
]
# 发送转码消息
def sendChat(conn, s):
conn.sendall(s.encode("utf-8"))
# 接收转码消息
def recvChat(conn):
return conn.recv(1024).decode("utf-8")
# 所有群友可见
def sendAll(chat):
NotifyAll(chat)
if chat[0]!='\\n':
chat += '\\n'
print (data)
def NotifyAll(chat):
global data
if con.acquire():
data = chat
con.notifyAll()
con.release()
def gointo(conn, nick):
global data
while True:
try:
temp = recvChat(conn)
if not temp:
conn.close()
return
remsg = ""
for li in range(len(info)):
if temp.find(info[li]["msg"]) != -1:
remsg = "\\n\\t机器人回复: " + info[li]["remsg"] + "\\n\\n"
break
if con.acquire():
if temp.find("@机器人 ") != -1:
url = "http://wx0725.top/project/php/jiqiren/xiaodie.php?pass=文轩&keyword=" + temp[temp.rfind("@机器人 ")+len("@机器人 "):]
r=requests.get(url, timeout=10)
remsg = "\\n\\t机器人回复: " + r.text + "\\n\\n"
con.release()
temp += remsg
sendAll(temp)
except:
sendAll(nick + " 骂骂咧咧退出群聊!")
return
# 客户端离开
def goout(conn, nick):
global data
while True:
if con.acquire():
con.wait()
if data:
try:
sendChat(conn, data)
con.release()
except:
con.release()
return
def main():
configDat = configparser.ConfigParser()
file_path = os.path.abspath(os.path.dirname(__file__)) + '\\config.ini'
configDat.read(file_path, encoding='utf-8')
NUM = configDat.getint('server', 'num')
HOST = configDat.get('server', 'host')
PORT = configDat.getint('server', 'port')
print("群聊创建中......")
group = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP 管理员,上帝视角
group.bind((HOST, PORT))
group.listen(NUM)
print ("群聊创建成功!\\n\\n*****群号: %s(0/%d)****\\n" % (HOST, NUM))
while 1:
conn, addr = group.accept() # 监听加入一个成员(conn, addresss: port)
print ("账户: " + str(addr[1]) + "正在加入群聊")
nick = recvChat(conn)
sendAll("成员: " + str(addr[1]) + "设置昵称为【" + nick + "】")
sendChat(conn, data)
now = (threading.activeCount() + 1) >> 1
sendAll("\\n\\n*****群号: %s: 管理员: %d (%d/%d)****\\n" % (HOST, PORT, now, NUM))
sendChat(conn, data)
threading.Thread(target = gointo , args = (conn, nick)).start()
threading.Thread(target = goout , args = (conn, nick)).start()
group.close()
if __name__ =="__main__":
main()
以上是关于物联网系统集成的主要内容,如果未能解决你的问题,请参考以下文章
目前见过功能最完整的物联网系统项目,代码结构清晰,第一次使用就有点上头
《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片