物联网系统集成

Posted 流星蝴蝶没有剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网系统集成相关的知识,希望对你有一定的参考价值。

1. 简述物联网的体系架构及各层次的功能。

感知层:感知主要是对生物世界和物理世界的数据进行采集

网络层:建立互联网通信,主要是解决感知层的数据进行长距离传输问题

应用层:针对用户的需求将数据进行可视化,对接API等,实现数据的智能应用。

2. 简述物联网系统常用单片机特点及用途。

  1. 51 系列单片机

特点:支持乘法除法指令

片内RAM区间开辟了一个双重地址区间

支持位的逻辑运算。

用途:教学毕设等

  1. PIC 系列

特点:低耗、低电压、驱动能力强,支持在线调试,可直接驱动数码管

用途:消费电子产品,智能仪器仪表,汽车电子,金融电子,工业控制不同领域都有广泛的应用。

  1. 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()

以上是关于物联网系统集成的主要内容,如果未能解决你的问题,请参考以下文章

玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制

物联网开发|如何选择一款适合你的物联网操作系统?

物联网开发|如何选择一款适合你的物联网操作系统?

物联网开源操作系统,你了解多少?

物联网操作系统技术剖析

《物联网中间件技术与应用》:如何用先进的物联网中间件框架构建物联网系统