5.32 综合案例2.0 - TTS语音云播报(支持M320开发板)

news2024/12/25 9:16:53

HaaS506 - TTS语音云播报

  • 简介
  • 准备
  • 硬件接口
  • 代码流程
  • 功能实现
    • 1、物联网平台开发
    • 2、设备端开发
        • 代码
        • 调试
    • 3.应用平台开发
        • 3.1新建‘普通项目’
        • 3.2关联产品和设备
        • 3.3新建移动应用

简介

手机端发送文字,开发板发出对应语音信息。

  • 本案例需要使用到阿里云平台连接网络。通过阿里IOT studio应用开发移动应用,手机端发送文字信息,文字信息通过阿里云下发给开发板,开发板播放对应文字语音。

准备

本案例需要的硬件

器材数量
HaaS506开发板1
喇叭1
SIM卡1
4G天线1

硬件接口

在这里插入图片描述
在这里插入图片描述

代码流程

1、连接阿里云平台。
2、接收云平台下发物模型信息。
3、根据物模型信息播放语音

功能实现

1、物联网平台开发

第一次使用物联网平台的读者,需要开通实例后使用物联网平台功能。也可以使用免费的公共实例进行开发,在阿里云物联网平台中,左上角选择‘华东2-上海’,点击‘公共实例’,即可开通。

1、平台产品创建可参考haas506 2.0开发教程-aliyunIoT

2、创建产品属性(添加物模型)

  • 选择产品功能定义编辑草稿
    在这里插入图片描述

  • 添加自定义功能

  • 设置标识符数据类型读写类型参数,标识符(light)要与代码保持一致。点击确定
    在这里插入图片描述

  • 发布上线,点击确定
    在这里插入图片描述

2、设备端开发

  • 第一次使用开发板的读者可以按照haas5062.0开发教程-导学篇搭建开发环境。
  • 搭建完后复制以下代码到Visual Studio Code,复制产品证书到代码相应位置。
    在这里插入图片描述

代码

复制代码到VS code

main.py

# coding=utf-8
import network
import ujson
import utime as time
import modem
from  aliyunIoT import Device
import ota
import kv
import TTS as tts


#更改产品信息
###############################
productKey = "********"
productSecret = "*********"
###############################
global deviceName,g_connect_status,device_dyn_resigter_succed,netw
g_connect_status = False
netw = None
device = None
deviceSecret = None
device_dyn_resigter_succed = False
connect_state = False
#初始化物联网平台Device类,获取device实例
device = Device()
# 定义需要升级的模块和版本号
module_name = 'default'
app_version = '1.0.1'
# 定义升级包的下载和安装路径,其中url,hash_type和hash 会通过服务端推送被保存下来
info = {
        'url': '',
        'store_path': '/data/pyamp/app.zip',
        'install_path': '/data/pyamp/',
        'length': 0,
        'hash_type': '',
        'hash': ''
}

 # ota 消息推送的接受函数
def on_trigger(data):
     global info
 # 保存服务端推送的ota信息
     info['url'] = data['url']
     info['length'] = data['length']
     info['module_name'] = data['module_name']
     info['version'] = data['version']
     info['hash'] = data['hash']
     info['hash_type'] = data['hash_type']
    # 开始ota 包下载
     dl_data = {}
     dl_data['url'] = info['url']
     dl_data['store_path'] = info['store_path']
     ota.download(dl_data)



 # ota 升级包下载结果回调函数
def on_download(data):
     global info
     if data >= 0:
         print('Ota download succeed')
     # 开始ota包校验
         param = {}
         param['length'] = info['length']
         param['store_path'] = info['store_path']
         param['hash_type'] = info['hash_type']
         param['hash'] = info['hash']
         ota.verify(param)

 # ota 升级包校验结果回调函数
def on_verify(data):
      global info
      print(data)
      if data >= 0 :
          print('Ota verify succeed')
          print('Start Upgrade')
     # 开始ota升级
          param = {}
          param['length'] = info['length']
          param['store_path'] = info['store_path']
          param['install_path'] = info['install_path']
          ota.upgrade(param)

 # ota 升级包结果回调函数
def on_upgrade(data):
     if data >= 0 :
        print('Ota succeed')
        #ota升完级后 重启设备
        reboot()


def tts_play_cb(v):
    if v==7:
        print('play finish...')
    elif v==0:
        print('play start...')

def tts_play(tx):
    global tts_play_cb
    tts.setCallback(tts_play_cb)
    tts.setVolume(1)
    tts.setSpeed(6)
    ret = tts.play(2,0,1,tx)    #优先级;打断模式;模式1-UTF-8/2-GBK;字符串
    if(0 == ret):
        print('tts play success')
    elif(-1 == ret):
        print('tts play failed')
    while  tts.getState() == 1:
        time.sleep_ms(200)
        print('-----------')
        


#当iot设备连接到物联网平台的时候触发'connect' 事件
def on_connect(data):
    global module_name,default_ver,productKey,deviceName,deviceSecret,on_trigger,on_download,on_verify,on_upgrade,connect_state
    print('***** connect lp succeed****')
    data_handle = {}
    data_handle['device_handle'] = device.getDeviceHandle()
    # 初始化ota服务
    ota.init(data_handle)
    connect_state = True
    # ota 回调函数注册
    ota.on(1,on_trigger)
    ota.on(2,on_download)
    ota.on(3,on_verify)
    ota.on(4,on_upgrade)
    report_info = {
         "device_handle": data_handle['device_handle'],
         "product_key": productKey ,
         "device_name": deviceName ,
         "module_name": module_name ,
         "version": app_version
         }
    # 上报本机ota相关信息,上报版本信息返回以后程序返回,知道后台推送ota升级包,才会调用on_trigger函数
    ota.report(report_info)   

txt = ''
state = 0
#当iot云端下发属性设置时,触发'props'事件
def on_props(request):
    global txt,state
    print('clound req data is {}'.format(request))
    # # # #获取消息中的params数据
    params=request['params']
    # #去除字符串的'',得到字典数据
    params=eval(params)
    if "txt" in params :
        txt = params["txt"]
    time.sleep_ms(20)
    if "send" in params :
        state = params['send']
        if state ==1:
            tts_play(txt)   #播放语音文件
        state = 0
        up_data({'send':state})


#当连接断开时,触发'disconnect'事件
def on_disconnect():
    print('linkkit is disconnected')


#当iot云端调用设备service时,触发'service'事件
def on_service(id,request):
    print('clound req id  is {} , req is {}'.format(id,request))
#当设备跟iot平台通信过程中遇到错误时,触发'error'事件
def on_error(err):
    print('err msg is {} '.format(err))

#网络连接的回调函数
def on_4g_cb(args):
    global g_connect_status
    pdp = args[0]
    netwk_sta = args[1]
    if netwk_sta == 1:
        g_connect_status = True

    else:
        g_connect_status = False


#网络连接
def connect_network():
    global netw,on_4g_cb,g_connect_status
    #NetWorkClient该类是一个单例类,实现网络管理相关的功能,包括初始化,联网,状态信息等.
    netw = network.NetWorkClient()
    g_register_network = False
    if netw._stagecode is not None and netw._stagecode == 3 and netw._subcode == 1:
        g_register_network = True
    else:
        g_register_network = False
    if g_register_network:
    #注册网络连接的回调函数on(self,id,func);  1代表连接,func 回调函数  ;return 0 成功
        netw.on(1,on_4g_cb)
        netw.connect(None)
    else:
        print('网络注册失败')
    while True:
        if g_connect_status:
            print('网络连接成功')
            break
        time.sleep_ms(20)


#动态注册回调函数
def on_dynreg_cb(data):
    global deviceSecret,device_dyn_resigter_succed
    deviceSecret = data
    device_dyn_resigter_succed = True

# 连接物联网平台
def dyn_register_device(productKey,productSecret,deviceName):
    global on_dynreg_cb,device,deviceSecret,device_dyn_resigter_succed

    key = '_amp_customer_devicesecret'
    deviceSecretdict = kv.get(key)
    print("deviceSecretdict:",deviceSecretdict)
    if isinstance(deviceSecretdict,str):    
        deviceSecret = deviceSecretdict 

    if deviceSecretdict is None or deviceSecret is None:
        key_info = {
            'productKey': productKey  ,
            'productSecret': productSecret ,
            'deviceName': deviceName
            }
        # 动态注册一个设备,获取设备的deviceSecret
        #下面的if防止多次注册,当前若是注册过一次了,重启设备再次注册就会卡住,
        if not device_dyn_resigter_succed:
            device.register(key_info,on_dynreg_cb)  

def connect():
    global deviceName,g_connect_status,device_dyn_resigter_succed,connect_state
    deviceName = None
     # 获取设备的IMEI 作为deviceName 进行动态注册
    deviceName = modem.info.getDevImei()
    # 连接网络
    connect_network()
    if deviceName is not None and len(deviceName) > 0 :
        #动态注册一个设备
        dyn_register_device(productKey,productSecret,deviceName)
    else:
        print("获取设备IMEI失败,无法进行动态注册")
    while deviceSecret is None:
        time.sleep(0.2)
    print('动态注册成功:' + deviceSecret)
    key_info = {
        'region' : 'cn-shanghai' ,
        'productKey': productKey ,
        'deviceName': deviceName ,
        'deviceSecret': deviceSecret ,
        'keepaliveSec': 60,
        }
    #打印设备信息
    print(key_info)
    #device.ON_CONNECT 是事件,on_connect是事件处理函数/回调函数
    device.on(device.ON_CONNECT,on_connect)
    device.on(device.ON_DISCONNECT,on_disconnect)
    device.on(device.ON_PROPS,on_props)
    device.on(device.ON_SERVICE,on_service)
    device.on(device.ON_ERROR,on_error)
    device.connect(key_info)
    while not connect_state:
        time.sleep_ms(10)
    print('--------------------- aliyun connect --------------------------')
    up_data({'txt':'请输入语音信息'})
    up_data({'send':state})


def up_data(d):           
    d_str = ujson.dumps(d)
    data={
        'params':d_str
        }
    device.postProps(data)


if __name__ == '__main__':
    connect()       #连接阿里云


调试

1、串口调试工具log打印log

POWERONREASON:0x0000,parse:NORMAL_REBOOT.
mpthread_init stack:0x80afbb5c 0x80afbb5c
device_obj->iot_device_handle:0x80b9ff00
[  11.134]<E>ACTIVATION_REPORT2 activation_report2:286 report http data:POST /device/add HTTP/1.1
Host:nps.huntercat.cn
User-Agent: AliOS-Things
Content-Length:157
Accept: */*
Content-Type:application/json
Connection: Keep-Alive

{"activationStr":"V=3.0.0&P=Enginelf&A=HaaS506_App&B=HaaS506&C=M601&N=Cellular&X=HaaS506-M320&S=Cellular&O=FreeRTOS&T=DTU&M=866907051837598&Y=Alibaba-Cloud"}

网络连接成功
deviceSecretdict: ********
动态注册成功:********
{'deviceName': '*******', 'deviceSecret': '********', 'region': 'cn-shanghai', 'productKey': '*******', 'keepaliveSec': 60}
[1670291375.666][LK-0313] MQTT user calls aiot_mqtt_connect api, connect
[1670291375.666][LK-0317] *********
[1670291375.666][LK-0318] *********
[1670291376.333][LK-0313] MQTT connect success in 724 ms
<I>UA uagent_ext_comm_init[63]: [uA]prepare start uagent comm 

<I>UA uagent_ext_comm_init[74]: [uA]Subsrcibe TOPIC /sys/****/****/_thing/service/invoke

[1670291376.333][LK-0309] sub: /sys/****/****/_thing/service/invoke
<I>UA uagent_ext_comm_init[80]: [uA]IOT_MQTT_Subscribe(/sys/****/*****/_thing/service/invoke) success

[1670291376.333][LK-0309] sub: /sys/****/****/_thing/service/post_reply
<I>UA uagent_ext_comm_init[89]: [uA]IOT_MQTT_Subscribe(/sys/****/****/_thing/service/post_reply) success

[1670291376.333][LK-0309] pub: /sys/****/****/thing/config/log/get

[LK-030A] > 7B 22 69 64 22 3A 22 31  22 2C 22 76 65 72 73 69 | {"id":"1","versi
[LK-030A] > 6F 6E 22 3A 22 31 2E 30  22 2C 22 70 61 72 61 6D | on":"1.0","param
[LK-030A] > 73 22 3A 7B 22 67 65 74  54 79 70 65 22 3A 22 63 | s":{"getType":"c
[LK-030A] > 6F 6E 74 65 6E 74 22 2C  22 63 6F 6E 66 69 67 53 | ontent","configS
[LK-030A] > 63 6F 70 65 22 3A 22 64  65 76 69 63 65 22 7D 7D | cope":"device"}}

[1670291376.333][LK-0309] pub: /sys/a1laDtv9VrO/866907051837598/thing/deviceinfo/update

[LK-030A] > 7B 22 69 64 22 3A 22 32  22 2C 22 76 65 72 73 69 | {"id":"2","versi
[LK-030A] > 6F 6E 22 3A 22 31 2E 30  22 2C 22 70 61 72 61 6D | on":"1.0","param
[LK-030A] > 73 22 3A 5B 7B 22 61 74  74 72 4B 65 79 22 3A 22 | s":[{"attrKey":"
[LK-030A] > 53 59 53 5F 53 44 4B 5F  4C 41 4E 47 55 41 47 45 | SYS_SDK_LANGUAGE
[LK-030A] > 22 2C 22 61 74 74 72 56  61 6C 75 65 22 3A 22 43 | ","attrValue":"C
[LK-030A] > 22 2C 22 64 6F 6D 61 69  6E 22 3A 22 53 59 53 54 | ","domain":"SYST
[LK-030A] > 45 4D 22 7D 7B 22 61 74  74 72 4B 65 79 22 3A 22 | EM"}{"attrKey":"
[LK-030A] > 53 59 53 5F 4C 50 5F 53  44 4B 5F 56 45 52 53 49 | SYS_LP_SDK_VERSI
[LK-030A] > 4F 4E 22 2C 22 61 74 74  72 56 61 6C 75 65 22 3A | ON","attrValue":
[LK-030A] > 22 61 6F 73 2D 72 2D 33  2E 30 2E 30 22 2C 22 64 | "aos-r-3.0.0","d
[LK-030A] > 6F 6D 61 69 6E 22 3A 22  53 59 53 54 45 4D 22 7D | omain":"SYSTEM"}
[LK-030A] > 7B 22 61
***** connect lp succeed****
handle 0x80b9ff00
iot_device_handle:0x80b9ff00
ota register default status cb[1670291376.444][LK-0309] sub: /ota/device/upgrade//****/****/
ota Public topic:/sys/****/****/thing/deviceinfo/updateota Public msg:{"id":"0","version":"1.0","params":[{"attrKey":"SYS_OTA_ID","attrValue":"HOTA-3.3.0-1-0-0"}],"method":"thing.deviceinfo.update"}[1670291376.444][LK-0309] pub: /sys/****/****/thing/deviceinfo/update

[LK-030A] > 7B[LK-030A] > 73 22 3A 5B 7B 22 61 74  74 72 4B 65 79 22 3A 22 | s":[{"attrKey":"
[LK-030A] > 53 59 53 5F 4F 54 41 5F  49 44 22 2[LK-030A] > 33 2E 30 2D 31 2D 30 2D  30 22 7D 5D 2C 22 6D 65 | 3.0-1-0-0"}],"me
[LK-030A] > 74 68 6F 64 22 3A 22 74  68 69 6E 67 2E 64 65 76 | thod":"thing.dev
[LK-030A] > 69 63 65 69 6E 66 6F 2E  75 70 64 61 74 65 22 7D | iceinfo.update"}
[LK-030A] > 0ota rollback err1:-1ota ota init fail, ret:-1[  12.000]<E>APP_OTA customer ota init failed!

                                                                                                        ota report submode version
                                                                                                                                  ota Public topic:/ota/device/inform/a1laDtv9VrO/866907051837598 msg:{"id":0,"params":{"version":"amp-v2.03","module":"system"}}[167029137[LK-030A] > 2D 76 32 2E 30 33 22 2C  22 6D 6F 64 75 6C 65 22 | -v2.03","module"
[LK-030A] > 3A 22 73 79 73 74 65 6D  22 7D 7D 0ota Public topic:/ota/device/inform/a1laDtv9VrO/866907051837598 msg:{"id":0,"params":{"version":"1.0.1"}}[1670291376.555][LK-0309] pub: /ota/device/inform/a1laDtv9VrO/866907051837598

[LK-030A] > 7B 22 69 64 22 3A 30 2C  22 70 61 72 61 6D 73 22 | {"id":0[LK-030A] > 3A 7B 22 76 65 72 73 69  6F 6E 22 3A 22 31 2E 30 | :{"version":"1.0
[LK-030A] > 2E 31 22 7D 7D 00
[LK-030A] < 7B 22 63 6F 64 65 22 3A  32 30 30 2C 22 64 61 74 | {"code":200,"dat
[LK-030A] < 61 22 3A 7B 22 63 6F 6E  74 65 6E[LK-030A] < 64 22 3A 22 31 22 2C 22  6D 65 74 68 6F 64 22 3A | d":"1","method":
[LK-030A] < 22 74 68 69 6E 67 2E 63  6F 6E 66 6[LK-030A] < 3A 22 31 2E 30 22 7D                             | :"1.0"}

[1670291376.666][LK-1507] LOGPOST user log config arrived
user log switch state is: 0
toggle it using the switch in device detail page in https://iot.console.aliyun.com
[[LK-030A] < 73 22 2C 22 6D 65 74 68  6F 64 22 3A 22 74 68 69 | s","method":"thi
[LK-030A] < 6E 67 2E 64 65 76 69 63  65 69 6E 6[LK-030A] < 73 22 2C 22 6D 65 74 68  6F 64 22 3A 22 74 68 69 | s","method":"thi
[LK-030A] < 6E 67 2E 64 65 76 69 63  65 69 6E 66 6F 2E 75 70 | ng.deviceinfo.up
[LK-030A] < 64 61 74 65 22 2C 22 76  65 72 73 69 6F 6E 22 3A | date","version":
[LK-030A] < 2--------------------- aliyun connect --------------------------
[1670291376.666][LK-0309] pub: /sys/a1laDtv9VrO/866907051837598/thing/event/property/post

[LK-030A] > 7B 22 69 64 22 3A 22 33  22 2C 22 76 65 72 73 69 | {"id":"3","versi
[LK-030A] > 6F 6E[LK-030A] > BE 93 E5 85 A5 E8 AF AD  E9 9F B3 E4 BF A1 E6 81 | ................
[LK-030A] > AF 22 7D 2C 22 73 79 73  22 3A 7B 2MicroPython f036710-dirty on 2022-09-21, 14:50:41; haas506 with SLM320
Type "help()" for more information.
>>> [1670291376.777][LK-0309] pub: /sys/a1laDtv9VrO/866907051837598/thing/event/property/post_reply

[LK-030A] < 7B 22 63 6F 64 65 22 3A  32 30 30 2C 22 64 61 74 | {"code":200,"dat
[LK-030A] < 61 22 3A 7B 7D 2C 22 69  64 22 3A 22 33 22 2C 22 | a":{},"id":"3","
[LK-030A] < 6D 65 73 73 61 67 65 22  3A 22 73 75 63 63 65 73 | message":"succes
[LK-030A] < 73 22 2C 22 6D 65 74 68  6F 64 22 3A 22 74 68 69 | s","method":"thi
[LK-030A] < 6E 67 2E 65 76 65 6E 74  2E 70 72 6F 70 65 72 74 | ng.event.propert
[LK-030A] < 79 2E 70 6F 73 74 22 2C  22 76 65 72 73 69 6F 6E | y.post","version
[LK-030A] < 22 3A 22 31 2E 30 22 7D                          | ":"1.0"}

[1670291376.777][LK-0A08] DM recv generic reply
[1670291376.888][LK-0309] pub: /sys/a1laDtv9VrO/866907051837598/thing/event/property/post_reply

[LK-030A] < 7B 22 63 6F 64 65 22 3A  32 30 30 2C 22 64 61 74 | {"code":200,"dat
[LK-030A] < 61 22 3A 7B 7D 2C 22 69  64 22 3A 22 34 22 2C 22 | a":{},"id":"4","
[LK-030A] < 6D 65 73 73 61 67 65 22  3A 22 73 75 63 63 65 73 | message":"succes
[LK-030A] < 73 22 2C 22 6D 65 74 68  6F 64 22 3A 22 74 68 69 | s","method":"thi
[LK-030A] < 6E 67 2E 65 76 65 6E 74  2E 70 72 6F 70 65 72 74 | ng.event.propert
[LK-030A] < 79 2E 70 6F 73 74 22 2C  22 76 65 72 73 69 6F 6E | y.post","version
[LK-030A] < 22 3A 22 31 2E 30 22 7D                          | ":"1.0"}

[1670291376.888][LK-0A08] DM recv generic reply

2、阿里云平台,打开实时刷新,物模型会接收到开机默认物模型数据。

在这里插入图片描述

3.应用平台开发

以下是物联网应用开发流程,接下来按以下流程介绍移动端应用的开发。

3.1新建‘普通项目’

  • 使用阿里云IoTStudio创建项目。
  • 在项目管理新建空白项目
    在这里插入图片描述
    在这里插入图片描述

3.2关联产品和设备

在这里插入图片描述
在这里插入图片描述

3.3新建移动应用

在这里插入图片描述

  • 添加组件
    在这里插入图片描述

  • 配置组件信息

  • 1,文字在这里插入图片描述

  • 2,文本框

    • 配置数据源在这里插入图片描述

    • 数据源在这里插入图片描述

    • 配置交互在这里插入图片描述

  • 配置按钮在这里插入图片描述

    • 配置交互在这里插入图片描述
  • 保存与预览
    在这里插入图片描述

  • 手机扫描二维码就可在移动端应用
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TSP问题】基于遗传算法求解固定的开放式不返回多旅行推销员问题(M-TSP)附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

基于django+sqlite3的新闻网站管理系统源代码,含数据库文件

基于djangosqlite3的新闻网站管理系统源代码&#xff0c;含数据库文件 程序部署方法 1、安装程序依赖&#xff1b; 2、 manage.py migrate #初始化数据库&#xff1b; 3、 manage.py createsuperuser创建管理员&#xff1b; 4、manage.py runserver启动程序 完整程序下载地址&…

编程内功心法「底层原理系列」 底层架构原理,分析CPU处理器鲜为人知的那些秘密

前提概要 所谓&#xff0c;知彼知己百战不殆&#xff0c;针对于计算机的优化技术来讲&#xff0c;最底层也不过是针对于CPU技术的优化了&#xff0c;但是如果要区优化程序&#xff0c;涉及到CPU的执行能力&#xff0c;那必须要了解CPU的原理和概念以及执行过程等概念&#xff0…

html网页设计大学生作业成品——公益校园网站设计与实现(HTML+CSS+JavaScript)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

1.Spring概述(Spring官方文档总结)

目录 1.1jdk环境依赖 1.2 Spring介绍 1.3 Spring历史 1.4 设计理念 1.1 jdk环境依赖 从Spring Framework 5.1开始&#xff0c;Spring需要JDK 8 (Java SE 8)&#xff0c;并提供对JDK 11 LTS的开箱即用支持。建议将Java SE 8 update 60作为Java 8的最低补丁版本&#xff0c;但…

由于找不到qt5core.dll,无法继续执行代码的问题

由于找不到qt5core.dll,无法继续执行代码的问题处理&#xff0c;其实和平常的dll缺失处理方法是差不多的 一. 下载qt5core.dll文件来解决 1.在百度搜索qt5core.dll这个dll文件&#xff0c;并且下载到自己的电脑 2.或者是直接在别人的电脑找qt5core.dll&#xff0c;然后拷贝到…

(附源码)ssm医护服务平台 毕业设计 260954

SSM医护服务平台 摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设医护…

XFINIUM.PDF CROSS-PLATFORM BUNDLE 11.1.2

轻松将您的 PDF 应用程序移植到其他平台。 XFINIUM.PDF CROSS-PLATFORM BUNDLE 是一个用于跨平台 PDF 开发的库。在所有支持的平台&#xff08;.NET、Windows Forms、Xamarin.Mac、ASP.NET Webforms 和 MVC、控制台应用程序、Windows 服务、Mono、Windows Presentation Foundat…

Python.02.语法进阶

目录 基本运算符 比较运算符 赋值运算符 多变量赋值 逻辑运算符 案例&#xff1a; 案例实现源码如下 三元运算符 条件语句 循环语句 1.计算0-100的求和 2.for循环数组求和 3.range定义一个1-100的奇数数组,for循环求出数组的和 4.while...else...语法 基本运算符 比较…

联通物联网卡激活方法

科技的发展日新月异&#xff0c;我们国家的发展战略也是支持高新科技公司的发展&#xff0c;所以越来越多的高新科技公司出现&#xff0c;但凡是高新科技公司&#xff0c;在设备的联网中&#xff0c;都会用到物联卡&#xff0c;所以物联卡的市场也愈发火爆&#xff0c;那么今天…

Web前端大作业——基于HTML+CSS+JavaScript仿英雄联盟LOL游戏网站

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

pytorch复习笔记--nn.Embedding()的用法

目录 1--nn.Embedding()的用法 2--实例展示&#xff1a; 3--注意的问题 1--nn.Embedding()的用法 import torch.nn as nnembedding nn.Embedding(num_embeddings 10, embedding_dim 256) nn.Embedding()产生一个权重矩阵weight&#xff0c;其shape为&#xff08;num_em…

图解:Go Mutext

Mutex 可能处于两种不同的模式&#xff1a;正常模式和饥饿模式。 正常模式下获取Mutex 在正常模式下&#xff0c;新来的G会尝试自旋获取锁&#xff0c;如果自旋获取失败&#xff0c;则会按照FIFO的顺序排队获取锁。 当Mutex被释放&#xff0c;会唤醒等待队列中第一个等待者G&…

[附源码]计算机毕业设计求职招聘网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Spring框架的介绍、工厂设计模式以及Spring环境的搭建

spring崇尚&#xff1a;不重复的造轮子 二、工厂设计模式 工厂设计模式&#xff1a;工厂生产对象(配置文件properties反射) Spring创建对象的实现原理: 根据配置文件的id得到对应的class属性值,根据反射,通过类全路径创建对象; 通过配置文件,通过工厂设计模式,有反射动态创…

matlab knn方法快速实现,手把手教学

目录介绍话不多说&#xff0c;进入实战注意事项KNN算法的优势和劣势介绍 1968年&#xff0c;Cover和Hart提出K近邻算法。该算法既可以用于回归也可以用于分类&#xff0c;其用于分类时其输入为实例的特征向量&#xff0c;输出为实例的类别。假设给定一个训练数据集&#xff0c…

PsiQuantum宣布在容错量子计算架构方面取得新突破

&#xff08;图片来源&#xff1a;网络&#xff09; 12月2日&#xff0c;PsiQuantum宣布了一项突破性技术&#xff0c;该技术将使编译应用程序在运行时效率提高约50倍。可以更有效地实现容错量子计算。 该技术专门针对容错量子计算机的算法&#xff0c;而不是非容错的NISQ系统。…

linux倒序查看占用cpu或内存最多的进程

一、获取当前系统占用CPU最高的前10个进程 命令&#xff1a;ps aux|head -1;ps aux|sort -rn -k3|head -10 该命令组合由2条独立的命令组成&#xff1a; ps aux|head -1&#xff1a;这一句是为了获取标题&#xff08;USER PID %CPU %MEN VSZ RSS TTY STAT START TIME COMMAND…

儿童学生护眼台灯哪个牌子好?双十二儿童护眼台灯精选

我国儿童以及青少年的近视人数迅速增加&#xff0c;主要是不注意用眼时间&#xff0c;不良好的照明光线&#xff0c;拥有一个明亮舒适的光线环境&#xff0c;能大大减少近视概率&#xff0c;推荐合适的儿童护眼台灯给大家。 TOP1&#xff1a;南卡护眼台灯L1 推荐指数&#xf…

每天一个面试题:ThreadLocal底层原理和实现Demo(12.6.2022)

ThreadLocal底层原理和实现Demo每天一个面试题&#xff1a;ThreadLocal实现ThreadLocal的DemoThreadLocal底层原理为什么ThreadLocalMap的key设计为弱引用今天开始一个新专栏&#xff1a;每天一个面试题系列 也没有拿到令人心动的offer&#xff0c;看来自己学习方式和能力还是差…