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

HaaS506 - TTS语音云播报

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

简介

用python开发板写的云喇叭,文字转语音,附教程源码

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

  • 本案例需要使用到阿里云平台连接网络。通过阿里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 infoif 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 infoprint(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_cbtts.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_stateprint('***** 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,stateprint('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 = 0up_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_statuspdp = args[0]netwk_sta = args[1]if netwk_sta == 1:g_connect_status = Trueelse:g_connect_status = False#网络连接
def connect_network():global netw,on_4g_cb,g_connect_status#NetWorkClient该类是一个单例类,实现网络管理相关的功能,包括初始化,联网,状态信息等.netw = network.NetWorkClient()g_register_network = Falseif netw._stagecode is not None and netw._stagecode == 3 and netw._subcode == 1:g_register_network = Trueelse:g_register_network = Falseif 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('网络连接成功')breaktime.sleep_ms(20)#动态注册回调函数
def on_dynreg_cb(data):global deviceSecret,device_dyn_resigter_succeddeviceSecret = datadevice_dyn_resigter_succed = True# 连接物联网平台
def dyn_register_device(productKey,productSecret,deviceName):global on_dynreg_cb,device,deviceSecret,device_dyn_resigter_succedkey = '_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_statedeviceName = 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 versionota 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.rhkb.cn/news/39200.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深圳知名语音ic品牌,语音芯片方案公司,多功能语音芯片,WTV890

随着人工智能技术的不断发展&#xff0c;语音交互已成为智能家居、智能医疗、消费类电子等领域的主流趋势。WTV890作为深圳知名的语音IC品牌&#xff0c;凭借着卓越的性能、丰富的扩展功能和灵活的应用&#xff0c;已成为众多需要语音交互的智能设备的首选方案。 WTV890-32N 有…

chatgpt赋能python:用Python生成动画:带你深入了解Python动画生成技术

用Python生成动画&#xff1a;带你深入了解Python动画生成技术 Python作为一门高效的编程语言&#xff0c;已经被广泛应用于各个领域&#xff0c;包括数据分析、机器学习、自动化测试等。除此之外&#xff0c;Python还可以用于生成动画&#xff0c;帮助我们更直观地理解一些复…

银联AID

应用标识 application identifier&#xff1b;AID 由注册的应用提供商标识&#xff08;RID&#xff09;以及专用应用标识符扩展&#xff08;PIX&#xff09;组成 AID:即唯一标识一个应用&#xff0c;分为两部分&#xff0c;RID(5字节)PIX&#xff08;最多11字节&#xff09; …

信用卡的支付清算

一、分享背景 Hi 大家好&#xff0c;我今天给大家分享是信用卡清算方面的内容&#xff0c;今天的分享主要分四块来讲&#xff1a; 定价模式 业务流程 清算流程 常见问题 二、分享内容 1、定价模式 首先给大家分享一下关于信用卡定价方面的内容&#xff0c;信用卡的定价…

金融支付-银联卡支付系统产品介绍

一、系统概述 银联卡支付业务是中国现代化支付方式中最重要的一种&#xff0c;村镇银行作为金融支付机构&#xff0c;银联卡支付业务在其日常经营活动中&#xff0c;占有很大的比重。金电银联卡支付系统正是着眼于村镇银行业务需求&#xff0c;结合村镇银行业务特点&#xff0c…

SpringBoot使用银联支付

目录 前言 一、银联支付java sdk 二、官方DEMO 三、springboot项目使用银联支付 3.1、新建项目 3.2、配置 3.3、封装客户端 写在后面 前言 项目里使用了微信支付&#xff0c;支付宝支付。但是还不满足&#xff01;我们还需要银联支付&#xff01;&#xff01;那就去看…

银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。 使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位…

苹果手机充值显示服务器繁忙,iTunes充值常见错误和解决方法

iTunes充值常见错误和解决方法 小编归纳总结了常见的iTunes充值异常和解决方法&#xff0c;包括充值未到账、语音操作异常、订单状态异常、系统验证信息错误、支付密码异常、账户金额限制、银行卡状态异常及系统异常8大常见iTunes充值错误&#xff0c;以方便果粉顺利充值iTunes…

雅思阅读笔记

一、一个星期七天 1.Monday 2.Tuesday 3.Wednesday 4.Thursday5. Friday 6.Saturday 7.Sunday 二、一年十二个月 1.January 2.February 3.March 4.April 5.May 6.June 7.July 8.August 9.September 10. October 11.November 12.December 三、一年四季 1.spring 2.summer 3.autu…

雅思复习总结

文章目录 1. 考前复习阶段1.1 阅读1.2 听力1.3 写作1.4 口语 2. 考试过程3. 最后成绩 刚刚考完雅思&#xff0c;这是我第一次考雅思&#xff0c;总结一下这次考试的经验。 1. 考前复习阶段 对于中国考生来说&#xff0c;阅读和听力是强项&#xff0c;只需做大量的练习即可。重…

计算雅思成绩C语言,雅思成绩到底如何计算的?

很多烤鸭在漫漫屠鸭路上时常会感到困惑&#xff1a;明明自己发挥不错&#xff0c;为什么成绩却和想象的不同&#xff1f;总分达标了&#xff0c;小分却不够该怎么办&#xff1f; 其实雅思成绩单隐藏了很多的信息&#xff0c;今天我们来分析两份典型的成绩单&#xff0c;帮助烤鸭…

ubc本科计算机雅思要求,英属哥伦比亚大学雅思要求

英属哥伦比亚大学雅思要求是6.5分&#xff1b;托福93分。 英属哥伦比亚大学院系 不列颠哥伦比亚大学共设有25个院系&#xff1a; 应用科学系(Faculty of Applied Science) 建筑与园林建筑学院 (School of Architecture and Landscape Architecture) 文学系 (Faculty of Arts) 听…

【b站雅思笔记】Charlie有好好学习 - 雅思听力

〇、前情提要 最近备考雅思&#xff0c;学习一下前人经验。 参考&#xff1a; 手把手教你做地图题 | 雅思听力地图题 https://www.bilibili.com/video/BV1Pp4y167sM?t1331手把手教你做听力Part4 | 雅思听力填空题 https://www.bilibili.com/video/BV1AK4y1W7dh手把手教你做…

雅思口语P3的逻辑

找最核心的地方 核心-> 玩音乐的好处 然后拉上孩子的关系 然后拉上父母的关系

雅思小作文 柱状图

逻辑不太对&#xff0c;可以找三个女生下降的&#xff0c;两个上升的来写。因为男女比例增长都是相反的。 The bar charts compare the proportion of boy and girl top students in different courses in 1996 and 2000. Girls seemed have the best performance in Languages…

DataV+Echarts

1. 安装 vue3 也就是安装了一下vue3&#xff0c;但是 dataV 和 Echarts 的学习并没有使用vue的脚手架去创建一个项目。 原因有两点&#xff1a; dataV 目前对 vue3 的支持并不是很友好&#xff0c;主要还是基于 vue2 框架的一个组件库。脚手架创建 vue 项目确实会使开发更加的有…

基于Arduino通过并联L298N实现四驱麦克纳姆轮巡迹小车

1 前言 本人也是零基础进行Arduino学习的初学者&#xff0c;做小车期间遇到过很多困难&#xff0c;在此写下整个小车的制作流程以及遇到的问题与解决方案&#xff0c;希望对后来者有所帮助。在制作期间参考了许多文章得到了大佬的指点&#xff0c;以及下面展示成果如建模等是由…

chatgpt赋能python:Python怎么打竖线:学习竖线在Python中的应用

Python怎么打竖线&#xff1a;学习竖线在Python中的应用 1.引言 Python是和其他编程语言一样有许多基本语法&#xff0c;但是新手可能会遇到某些问题&#xff0c;例如&#xff0c;在Python中如何打竖线&#xff1f;在本篇文章中&#xff0c;我们将介绍如何在Python中打竖线以…