• [行业资讯] 华为又进账一笔专利费,Nordic 获其蜂窝物联网许可协议
      6月22日消息,据华为官网,近期华为技术有限公司与Nordic半导体公司签订专利许可协议,华为向Nordic及其客户授予了低功耗广域蜂窝物联网标准必要专利的组件级许可,相关专利许可费按照公平、合理和非歧视性(FRAND)原则设置。  华为和Nordic双方通过透明和友好的协商,在短时间内就达成了该协议。  根据该协议,Nordic可以为其蜂窝物联网客户提供全面的法律保护,并通过可行、合法的方式来获取并使用华为的高价值标准化蜂窝物联网技术。该协议将给物联网行业带来更大的商业和法律确定性。  华为欧洲知识产权部表示:“在低功耗广域LTE-M和窄带物联网领域,华为拥有领先的标准必要专利组合,这是4G标准的一个子集,对物联网具有巨大价值。华为很高兴与Nordic达成这项许可协议,这将使能各个行业大规模部署低功耗蜂窝物联网技术,进一步推动全球数字化转型。”   Nordic半导体公司表示:“蜂窝物联网领域的专利许可在行业中是一种相对较新的实践,需要有灵活的方案。与华为达成的这项协议,标志着蜂窝物联网行业开始逐步采取全球半导体行业基于FRAND原则进行标准必要专利许可的实践。双方进行了合理和务实的谈判,并认识到简化程序将有助于促进市场增长,让包括华为、Nordic以及Nordic的蜂窝物联网客户在内的各方都受益。”  此前华为知识产权部部长樊志勇指出,过去5年累计超过20亿部智能手机获得了华为4G/5G专利许可;每年约有800万辆获得华为4G/5G专利许可的智能汽车交付给消费者;在视频领域,目前已有260家厂商、10亿台终端产品通过专利池获得华为的HEVC专利许可;在WiFi领域,华为在积极讨论建立新的专利池,预计每年将为全球超过30亿台WiFi设备提供一站式专利许可。此外,华为也在与相关机构积极沟通5G领域的联合专利运营方案。
  • [已解决问题归档] 【USM产品】【对应ASR功能】SIP和MRCP协议的端口在哪里进行配置
    【功能模块】对接ASR【操作步骤&问题现象】使用简易demo调用asr服务,asr厂商反馈mrcp协议没有建立,麻烦帮忙解答一下截图中的端口是sip的udp端口?还是要设置为mrcp的端口【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [行业资讯] GlobalData:这些进步将使元宇宙取得成功
    GlobalData的分析师透露,他们认为这些进步将为元宇宙提供动力,并推动其采用。GlobalData 颠覆性技术实践主管 Kiran Raj 说:“延迟是元宇宙采用的主要障碍,几家公司正试图根据其技术或商业敏锐度从不同角度解决这个问题。”“潜在的解决方案可能是网络协议、软件应用程序或硬件,如芯片、 AR 和 VR 设备”。在潜在的解决方案中,Syntropy推出了一种新的互联网协议,称为DARP(分散自主路由协议)。DARP 连接世界各地的数据中心,可以检测性能问题并立即切换到性能更好的信道。GlobalData 表示,像 DARP 这样的新协议将减少网络延迟,并通过其去中心化特性帮助支持元宇宙和 Web 3.0 应用程序。GlobalData 名单上的另一个延迟克星是 Wi-Fi 7。GlobalData 表示,高级多链路操作 (MLO) 使 Wi-Fi 7 设备能够聚合信道并在它们之间快速切换,从而在高密度、拥挤的网络中保持性能。GlobalData 的高级颠覆性技术分析师 Abhishek Paul Choudhury 评论说:“随着新兴技术的出现,对更高网络速度的需求每天都在增加,因此数据流需要快速且持续。”“与现有网络功能相比,分散式路由协议以及 Wi-Fi 7、区块链和边缘计算等技术进步可以带来更高的吞吐量和更低的延迟。”在应用程序方面,GlobalData指向瑞士初创公司TYXIT开发的基于SaaS的会议应用程序。该应用程序的专利技术支持低于 30 毫秒的延迟——类似于在同一个房间里讲话——这可以实现实时声音传输,以实现沉浸式体验,如虚拟世界中的音乐会。最后,沉浸式体验将需要尖端的外围设备。可穿戴计算巨头 Vuzix 与移动运营商 Verizon 之间的合作让前者利用了后者的 5G 和边缘计算技术。这些技术的结合使Vuzix的智能眼镜能够运行更长时间,计算能力更强,响应时间更短。Choudhury补充道:“元宇宙的目标是让每个人都加入,因为它是一种社交技术。随着越来越多的人加入,同步的数量会随着网络负载的增加而增加。”“新兴技术的发展有可能将延迟降至最低,并为元宇宙的成功发挥关键作用。”
  • [行业资讯] 华为与Nordic达成蜂窝物联网许可协议
    华为技术有限公司与Nordic半导体公司签订专利许可协议。根据协议,Nordic可以为其蜂窝物联网客户提供全面的法律保护,并通过可行、合法的方式来获取并使用华为的高价值标准化蜂窝物联网技术。
  • [行业资讯] 华为与Nordic达成蜂窝物联网许可协议
    证券时报e公司讯,6月17日,华为技术有限公司与Nordic半导体公司签订专利许可协议。根据协议,Nordic可以为其蜂窝物联网客户提供全面的法律保护,并通过可行、合法的方式来获取并使用华为的高价值标准化蜂窝物联网技术。
  • [行业资讯] 业界预计Matter标准将促进智能家居的接受度
    协议使消费者更容易添加新设备,连接现有设备,如恒温器……虽然现在似乎每个人都在让自己的家变得更智能,但这一领域仍处于早期采用者阶段。正如HVAC承包商可以证明的那样,意识和兴趣正在增长。越来越多的房主想要智能恒温器。一些公司甚至对泄漏探测器等智能设备表现出了兴趣,这可能有助于发展水力发电市场。不过,许多消费者仍不愿做出重大承诺。最大的障碍之一是这些设备缺乏一个标准。这种情况即将改变。世界上许多最大的科技公司——包括Apple、Amazon和Google——都支持连接标准联盟(CSA)来创建一个家庭连接标准。这个被称为Matter的标准将于今年晚些时候推出。Matter将允许来自不同制造商的设备在同一平台上运行。Google智能家居生态系统产品营销经理DanielMoneta表示,目前每个平台都有自己的要求——所谓的“围墙花园”——既阻碍了发展,也让消费者感到沮丧。Moneta还在CSA的多个委员会任职。Moneta表示,当今消费者的一个主要担忧是投资智能家居产品,却发现它与他们的其他设备或他们未来可能购买的设备不兼容。根据ParksAssociates的一份报告,12%不拥有或不打算购买智能家居设备的消费者表示对如何设置和使用该设备感到困惑。该报告建议,不同设备类型和品牌的设置过程的一致性,有助于提高消费者采用新产品的信心。这就是Matter的目标。Moneta表示,这也将有助于开发过程。目前,开发人员必须创建不同版本的产品,以适应不同的智能家居生态系统。借助Matter,开发人员将能够将这些资源用于创造更好的产品。“用户的入门成本和开发人员的开发成本太高了,”Moneta表示:“但重要的是,真的会为消费者提供选择,为开发者提供创新。”打破“围墙花园”Matter是免版税的,但仍然是一个专有系统。这意味着CSA将该规范授权给开发人员。Moneta表示,该协会欢迎任何想要参与制定标准的公司。“Matter将支持哪些功能和设备,最大决定因素是谁出现并将资源投入其中,”Moneta补充道:“我们真的张开双臂欢迎每一个人。”ResideoTechnologiesInc.是积极与CSA合作的公司之一,在CSA的董事会中占有一席之地。Resideo的战略计划主管DaveKaufman表示,公司致力于使用开放标准。Resideo的工程师参加了各种Matter小组委员会,包括最终确定作为最终源代码基础的规范。Kaufman表示:“重要的是,该行业有机会提高互操作性,并打破‘围墙花园'生态系统给消费者带来的困惑。通过所有解决方案无缝通信的能力,我们消除了采用的一个障碍。”Kaufman举了一个例子,承包商安装了Resideo的HoneywellHome智能恒温器,并配备了Matter规范,安装后,承包商将能够指导房主轻松集成更多与Matter兼容的产品。Kaufman表示,如果不能轻易做到这一点,可能会阻碍另一种产品的采用。同时,Kaufman表明,Resideo管理层打算在未来的产品中支持Matter,但目前没有讨论具体细节。该公司将为用户提供额外的方式来访问Matter协议之外的设备。提高智能设备的安全性安全问题是扩展智能家居适应的另一个主要挑战。TrustedFuture和美国国家安全研究所的一项调查发现,消费者对技术的信任度存在重大差距。大多数人认为应该对在线数据采取比现在更高的安全级别。Kaufman表示,Matter将采用最先进的安全标准,以确保基于Matter的通信中传输的信息或数据的隐私。Moneta表示,只要打破“围墙花园”就会有所帮助。如果出现安全问题,整个Matter社区都会努力解决,而不仅仅是一个提供商。此外,简化的系统意味着更少的人为错误机会。“Matter的功能非常强大,可以消除很多安全故障点,比如拥有很多不同的账户,并将它们连接在一起。”Moneta表示。目前,Matter可以连接的设备有些受限。因此,智能恒温器和智能窗户系统可以在一天中的特定时间协同工作以减少热量。目前还不支持电器,但相信很快,智能恒温器和智能烤箱可以以同样的方式进行协调。ABI Research预测,到本世纪末,将有超过55亿台符合Matter标准的智能家居设备上市。但Matter标准最吸引人的方面之一是其具有追溯性。消费者不必购买所有新设备,现有设备将实现无缝升级。
  • [行业资讯] 为什么物联网协议是智能家居的基础
    您有多少智能家居设备?如果您环顾四周,可能不会找到太多;也许您有一个智能门铃,一个声控助手或者一个连网的医疗设备。尽管我们大多数人可能一只手就能数清家中的智能家居设备,但它们正日益融入我们的日常生活中。实际上,智能家居市场(2016年价值556.5亿美元)预计到2025年将猛增至1742.4亿美元。当您只使用几个物联网设备时,您无需使用通用的物联网协议或数据通信标准来管理生态系统。毕竟,您的门铃没有理由与您的咖啡机“交谈”,拥有两个不同的应用程序来管理两个不同的设备并不是一个大麻烦。但是,随着物联网技术的发展以及我们的家庭变得更加互联,我们将需要所有设备之间、其控制器和本地无线连接系统(例如Wi-Fi、蓝牙)之间进行交互,否则,典型的物联网生态系统就不会像它应该的那样顺畅。智能家居的目的不就是让我们的生活更轻松吗?我们为什么需要建立一个通用的物联网协议?由于没有普遍接受的数据通信协议,因此不同品牌商制造的智能设备通常会说不同的语言,这使得物联网生态系统中的设备难以相互通信,从而阻碍了语义互操作性。这种较差的互操作性降低了这些设备应该为用户提供的便利性和效率。为了确保强大的物联网生态系统,一些消费者和企业可能会从同一品牌处购买系列设备,例如,房主可能会用同一品牌的冰箱、洗衣机和烘干机来升级自己的屋子,然后用智能手机控制所有这些设备。但是,这些设备仍需要以即插即用的方式连接用户的家庭Wi-Fi,以便于设置。从这里,设备需要毫不费力地保持连接,以确保它们在用户需要时随时准备工作。用户可能会希望在某个时候将另一个品牌的产品集成到其物联网生态系统中,这就引发了设备间数据通信问题。许多较小的设备旨在由用户自行安装,如果安装和集成不够简单,则用户将会比预期的更头疼。此外,如果设备不遵循相同的网络安全协议,则智能网络可能会存在漏洞,使黑客能够窃取信息或更改系统。物联网协议将使设备制造商和用户都受益在Jabil的2020年智能家居技术趋势调查中, 99%的智能家居产品公司决策者认为,制定数据通信标准是有价值的。对科技公司而言,特定的潜在利益是广泛的。物联网协议将:▲推动建立管理所有连网设备的集线器的机会▲加快用户采用智能家居和商业设备的速度,因为用户不必面对设备集成方面的挑战▲让公司专注于自己的核心优势,而不必担心连接问题▲通过与其他类型的已连网设备关联,使品牌所有者能够捕获丰富的数据集▲增加追加销售和交叉销售的机会当然,数据通信标准也将使最终用户受益。理想情况下,用户插入新设备并打开后,该设备将与本地网络连接,无缝加入物联网生态系统。这种简单、用户友好的网络协议策略将允许用户轻松地自行安装连网设备。此外,智能家居市场正在迅速增长。在短短的两年内,有57%的调查参与者看到了整体市场机会,翻了一番还多。事实上,机会的增长速度超过了三分之一受访者的预期。这意味着巩固这些标准的最佳时机现在已经到来。在某个时候,房屋或建筑物中的大多数(甚至全部)设备都是智能的。为这些产品建立通用语言将确保最高质量的物联网连接,使新设备能够轻松地集成到智能家居或网络中,并且可以和谐地协同工作。开发物联网协议:正在进行的工作为了实现完全互联的物联网生态系统,行业专家需要在所有设备(无论是在家中还是在汽车中)之间找到或开发一种共通性,以建立一种语言,使不同品牌的设备可以在整个物联网生态系统中相互通信。此外,这些标准应具有共同的安全协议,以确保没有网络安全漏洞。在这方面已经取得了进展。科技巨头亚马逊(Amazon)、谷歌(Google)和苹果(Apple)联手创建了一个智能家居标准,该标准将通过Zigbee联盟运行。Zigbee提供了稳定的物联网平台和各种技术,例如它们的全栈,一种基于IEEE 802.15.4的高级物联网通信协议规范。它用于通过小型低功耗数字无线电创建个人区域网络,适用于从家庭自动化到个人电子健康记录(EHR)的广泛应用。该项目称为IP互联家庭,旨在简化设备制造商的开发并提高消费者的兼容性。该项目致力于使智能家居设备安全、可靠和无缝使用。通过建立在互联网协议(IP)的基础上,它旨在实现智能家居设备、移动应用和云服务之间的通信,并定义一组特定的基于IP的网络技术来进行设备认证。这是一个良好的开端,但是在这些标准最终确定之前,智能家居制造商仍然需要做出一些关键的决定。物联网协议的不同类型这些决定之一包括确定物联网协议。蓝牙:一种集成到大多数移动设备中的短距离通信技术,从而为个人产品提供了主要优势。由于它具有可扩展性、低功耗和适应市场创新的灵活性,因此该技术是物联网的基础。物联网应用的重要协议是蓝牙低能耗(BLE)和蓝牙智能。Wi-Fi:设备的无线连接技术。它提供了快速的数据传输,并可以处理大量数据。这是局域网环境中最热门的连接类型。ZigBee:一种低功耗、低数据速率的无线网络,主要用于工业应用。通过创建用于物联网的通用语言,ZigBee联盟使智能对象可以在任何网络上安全地工作,并且可以无缝地相互交互。Z-Wave:一种无线通信协议,主要用于家庭自动化。它是一个网状网络,使用低能量无线电波在家用电器之间进行通信,从而实现对住宅设备和其他设备(例如照明控制、安全系统和恒温器)的无线控制。(作者:David Basch;编译:iothome)
  • [技术干货] 超详细带你用Java实现QQ的聊天功能[转载]
    第一步:完成界面搭建要求:创建两个窗口:一个客户端,一个服务端,完成代码书写步骤:1.定义JFrame窗体中的组件:文本域,滚动条,面板,文本框,按钮 //属性    //文本域    private JTextArea jta;    //滚动条    private JScrollPane jsp;    //面板    private JPanel jp;    //文本框    private JTextField jtf;    //按钮    private JButton jb; 2.在构造方法中初始化窗口的组件: //构造方法    public ServerChatMain(){        //初始化组件        jta = new JTextArea();        //设置文本域默认不可编辑        jta.setEditable(false);        //注意:需要将文本域添加到滚动条中,实现滚动效果        jsp =new JScrollPane(jta);        //初始化面板        jp = new JPanel();        jtf = new JTextField(10);        jb=new JButton("发送");        //注意:需要将文本框与按钮添加到面板中        jp.add(jtf);        jp.add(jb); 注意:需要将滚动条与面板全部添加到窗体中,继承了窗体的属性,这里this就是窗体 this.add(jsp, BorderLayout.CENTER);//BorderLayout--边框布局        this.add(jp,BorderLayout.SOUTH);4.设置设置”标题“,大小,位置,关闭,是否可见   //注意:需要设置”标题“,大小,位置,关闭,是否可见        this.setTitle("QQ聊天服务端");        this.setSize(400,300);        this.setLocation(700,300);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭,程序就退出        this.setVisible(true);//设置窗体可见    }这样我们就完成了服务端的QQ聊天界面窗口搭建:注意:JTextArea文本域是不可以书写的客户端与服务端代码类似,这里就不一一展示了书写完毕代码,运行效果如下图:第二步:TPC通信的思路与步骤‍❄️使用网络编程完成数据点的传输(TCP,UDP协议)TCP协议TCP 是面向连接的运输层协议。应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据面向字节流。TCP 中的“流”指的是流入到进程或从进程流出的字节序列TCP 服务端 具体步骤(客户端类似)具体步骤:   1.创建一个服务端的套接字    2.等待客户端连接   3.获取socket通道的输入流(输入六是实现读取数据的,一行一行读取)BufferedReader->readLine();    4.获取socket 通道的输出流(输出流实现写出数据,也是写一行换一行,刷新)BufferedWriter->newLine();    5.关闭socket 通道TCP通信步骤代码实现: try {            //1.创建一个服务端的套接字            ServerSocket serverSocket = new ServerSocket(8888);             //2.等待客户端连接           Socket socket = serverSocket.accept();             //3.获取socket通道的输入流(输入六是实现读取数据的,一行一行读取)BufferedReader->readLine();            //InputStream in = socket.getInputStream();           BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));            //4.获取socket 通道的输出流(输出流实现写出数据,也是写一行换一行,刷新)BufferedWriter->newLine();            //当用户点击发送按钮的时候写出数据            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));             //循环读取数据并拼接到文本域            String line = null;           while((line = br.readLine())!=null){               //将读取的数据拼接到文本域中显示               jta.append(line+System.lineSeparator());           }              //5.关闭socket 通道            serverSocket.close();         }catch (IOException e) {            e.printStackTrace();        } 点击发送按钮实现数据的传输 @Override    public void actionPerformed(ActionEvent actionEvent) {        System.out.println("发送按钮被点击了");    }步骤:1.获取文本框中发送的内容2.拼接需要发送的数据内容3.自己也要显示4.发送5.清空文本框内容@Override    public void actionPerformed(ActionEvent actionEvent) {        //System.out.println("发送按钮被点击了");        //1.获取文本框中发送的内容        String text = jtf.getText();        //2.拼接需要发送的数据内容        text = "服务端对客户端说:"+text;        //3.自己也要显示        jta.append(text);        //4.发送        try {            bw.write(text);            bw.newLine();//换行刷新            bw.flush();            //5.清空文本框内容            jtf.setText("");        } catch (IOException e) {            e.printStackTrace();        }      } 第三步:实现回车键发送数据(客户端类似)首先要实现一个接口public class ClientChatMain extends JFrame implements ActionListener, KeyListener {@Override    public void keyPressed(KeyEvent e) {         //回车键        // System.out.println(e);        //发送数据到socket 同道中        if(e.getKeyCode()==KeyEvent.VK_ENTER) {        sendDataToSocket();    }全部代码:服务端:package com.ithmm.chat; import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.Properties; //说明:如果一个类,需要有界面的显示,那么这个类就需要继承JFrame,此时,该类可以被成为一个窗体类/*步骤:     1.定义JFrame窗体中的组件     2.在构造方法中初始化窗口的组件     3.使用网络编程完成数据的链接(TPC,UDP  协议)     4.实现"发送”按钮的监听点击事件     5.实现“回车键”发送数据 */public class ServerChatMain extends JFrame implements ActionListener, KeyListener {    public static void main(String[] args) {         //调用构造方法        new ServerChatMain();    }     //属性    //文本域    private JTextArea jta;    //滚动条    private JScrollPane jsp;    //面板    private JPanel jp;    //文本框    private JTextField jtf;    //按钮    private JButton jb;    //输出流(成员变量)    private BufferedWriter bw = null;    //服务端的端口号    //private static int serverPort;     //使用static静态方法读取外部京台文件    //static代码块特点:1.在类加载的时候自动执行    //特点2:一个类会被加载一次,因此静态代码块在程序中仅会被执行一次     /*static{        Properties prop = new Properties();        try {            //加载            prop.load(new FileReader("chat.properties"));            //给属性赋值            Integer.parseInt(prop.getProperty("serverPort"));        } catch (IOException e) {            e.printStackTrace();        }    }*/    //构造方法    public ServerChatMain(){        //初始化组件        jta = new JTextArea();        //设置文本域默认不可编辑        jta.setEditable(false);        //注意:需要将文本域添加到滚动条中,实现滚动效果        jsp =new JScrollPane(jta);        //初始化面板        jp = new JPanel();        jtf = new JTextField(10);        jb=new JButton("发送");        //注意:需要将文本框与按钮添加到面板中        jp.add(jtf);        jp.add(jb);         //注意:需要将滚动条与面板全部添加到窗体中,继承了窗体的属性,这里this就是窗体        this.add(jsp, BorderLayout.CENTER);//BorderLayout--边框布局        this.add(jp,BorderLayout.SOUTH);         //注意:需要设置”标题“,大小,位置,关闭,是否可见        this.setTitle("QQ聊天服务端");        this.setSize(400,300);        this.setLocation(700,300);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭,程序就退出        this.setVisible(true);//设置窗体可见         /**************** TCP   服务端    Start *********************/        //给发送按钮绑定一个监听点击事件        jb.addActionListener(this);        //给文本框绑定一个键盘点击事件        jtf.addKeyListener(this);         try {            //1.创建一个服务端的套接字            ServerSocket serverSocket = new ServerSocket(8888);             //2.等待客户端连接           Socket socket = serverSocket.accept();             //3.获取socket通道的输入流(输入六是实现读取数据的,一行一行读取)BufferedReader->readLine();            //InputStream in = socket.getInputStream();           BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));            //4.获取socket 通道的输出流(输出流实现写出数据,也是写一行换一行,刷新)BufferedWriter->newLine();            //当用户点击发送按钮的时候写出数据            bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));             //循环读取数据并拼接到文本域            String line = null;           while((line = br.readLine())!=null){               //将读取的数据拼接到文本域中显示               jta.append(line+System.lineSeparator());           }              //5.关闭socket 通道            serverSocket.close();         }catch (IOException e) {            e.printStackTrace();        }         /**************** TCP   服务端    end  *********************/    }     @Override    public void actionPerformed(ActionEvent actionEvent) {        //System.out.println("发送按钮被点击了");       sendDataToSocket();    }    //行为    @Override    public void keyPressed(KeyEvent e) {         //回车键        // System.out.println(e);        //发送数据到socket 同道中        if(e.getKeyCode()==KeyEvent.VK_ENTER) {            sendDataToSocket();        }    }    //定义一个方法,实现将数据发送到socket通道中    private void sendDataToSocket(){        //1.获取文本框中发送的内容        String text = jtf.getText();        //2.拼接需要发送的数据内容        text = "服务端对客户端说:"+text;        //3.自己也要显示        jta.append(text+System.lineSeparator());        //4.发送        try {            bw.write(text);            bw.newLine();//换行刷新            bw.flush();            //5.清空文本框内容            jtf.setText("");        } catch (IOException e) {            e.printStackTrace();        }     }     @Override    public void keyTyped(KeyEvent keyEvent) {     }       @Override    public void keyReleased(KeyEvent keyEvent) {     }   } 客户端: import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;import java.util.Properties; //说明:如果一个类,需要有界面的显示,那么这个类就需要继承JFrame,此时,该类可以被成为一个窗体类/*步骤:     1.定义JFrame窗体中的组件     2.在构造方法中初始化窗口的组件 */ public class ClientChatMain extends JFrame implements ActionListener, KeyListener {    public static void main(String[] args) {         //调用构造方法        new ClientChatMain();    }     //属性    //文本域    private JTextArea jta;    //滚动条    private JScrollPane jsp;    //面板    private JPanel jp;    //文本框    private JTextField jtf;    //按钮    private JButton jb;    //s输出流    private BufferedWriter bw =null;    //客户端的IP地址   // private static String clientIp;    //客户端的port端口号    // private static int clientPort;     //静态代码块加载外部配置文件   /* static{      Properties prop = new Properties();        try {            prop.load(new FileReader("chat.properties"));            clientIp = prop.getProperty("clientIp");            clientPort =Integer.parseInt( prop.getProperty("clientPort"));        } catch (IOException e) {            e.printStackTrace();        }    }*/    //构造方法    public ClientChatMain(){        //初始化组件        jta = new JTextArea();        //设置文本域默认不可编辑        jta.setEditable(false);        //注意:需要将文本域添加到滚动条中,实现滚动效果        jsp =new JScrollPane(jta);        //初始化面板        jp = new JPanel();        jtf = new JTextField(10);        jb=new JButton("发送");        //注意:需要将文本框与按钮添加到面板中        jp.add(jtf);        jp.add(jb);         //注意:需要将滚动条与面板全部添加到窗体中,继承了窗体的属性,这里this就是窗体        this.add(jsp, BorderLayout.CENTER);//BorderLayout--边框布局        this.add(jp,BorderLayout.SOUTH);         //注意:需要设置”标题“,大小,位置,关闭,是否可见        this.setTitle("QQ聊天客户端");        this.setSize(400,300);        this.setLocation(700,300);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭,程序就退出        this.setVisible(true);//设置窗体可见         /**************** TCP   客户端    Start *********************/         //给发送按钮绑定一个监听点击事件        jb.addActionListener(this);        //给文本框绑定一个键盘键        jtf.addKeyListener(this);        try {            //1.创建一个客户端的套接字(尝试连接)             Socket socket = new Socket("127.0.0.1",8888);             //2.获取socket通道的输入流           BufferedReader br =  new BufferedReader(new InputStreamReader(socket.getInputStream()));            //3.获取socket 通道的输出流          bw =  new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));            //循环读取数据,并拼接到文本域           String line = null;           while((line = br.readLine())!=null){               jta.append(line + System.lineSeparator());           }             //4.关闭socket 通道            socket.close();        }catch (Exception e){            e.printStackTrace();        }         /**************** TCP   客户端    end  *********************/    }     @Override    public void actionPerformed(ActionEvent e) {       sendDataToSocket();    }    //行为    @Override    public void keyPressed(KeyEvent e) {        //回车键        if(e.getKeyCode() == KeyEvent.VK_ENTER){            //发送数据            sendDataToSocket();        }     }    private void sendDataToSocket(){        //1.获取文本框需要发送内容        String text = jtf.getText();         //2.拼接内容         text = "客户端对服务端说"+text;         //3.自己显示        jta.append(text+System.lineSeparator());         try {            //4.发送            bw.write(text);            bw.newLine();//换行加刷新            bw.flush();             bw.write(text);            //5.清空            jtf.setText("");        } catch (IOException e) {            e.printStackTrace();        }     }    @Override    public void keyTyped(KeyEvent e) {     }     @Override    public void keyReleased(KeyEvent e) {     } } 接口类:public interface addActistener {}public interface addActionListener {原文链接:https://blog.csdn.net/m0_68089732/article/details/124897209
  • [问题求助] 【C6650-Z33 C662A-Z33 两款球机产品】【ONVIF 协议对接】遇到无法跳预设位
    【功能模块】我们采购C6650-Z33 C662A-Z33 两款球机 ONVIF协议对接。【操作步骤&问题现象】我们在使用ONVIF 协议对C6650-Z33 C662A-Z33 两款球机进行对接时遇到了问题。 我们程序能通过 ONVIF 协议 控制摄像头 上下左右转动,但是始终无法跳转到预设位。刚开始,我们以为我们程序问题,然后我们下载了第三方ONVIF协议工具 【ONVIF Device Manager】,但结果也是报错。无法ONVIF通信,我们试了海康摄像机,是没有问题的。【截图信息】球机的本身配置:使用第三方ONVIF协议工具报错:【日志信息】(可选,上传日志内容或者附件)
  • [热门活动] AnimeGANv2照片动漫化
    【AnimeGANv2照片动漫化】利用AI处理方法,把你喜欢的照片变成动漫风格。案例链接:https://developer.huaweicloud.com/develop/aigallery/notebook/detail?id=02a75fdf-0835-4876-ad9e-cd92ea4de95dhttps://developer.huaweicloud.com/develop/aigallery/notebook/detail?id=b79bdf3f-6ae2-4585-9ae3-132230d2bf1b 参与步骤:1、开发者按照案例链接,或者点击新用户操作指南的提示完成体验;2、替换图片后,运行代码生成动漫化效果图;3、截图动漫化效果图(如下图所示),将截图发布到本帖评论区
  • [技术干货] 如何实现IPv6与IPv4共存互通
    目前,业界已达成共识:IPv6技术是当前可行的解决IP地址短缺唯一根本的解决方案。但是由于IPv6与IPv4技术不兼容,而且现网中有大量的IPv4设备和用户存在,需要在网络演进过程中解决异构网络的共存与互通问题。现今IP网络仍然是以IPv4为主体,IPv6网络只是得到小范围的部署和商用,因此必然会在很长的一个时期内,IPv4及IPv6网络必然会有共存的场景,那就需要考虑V4V6并存的策略和技术。从技术本质上讲,解决IPv4地址短缺,可以采用两种不同的技术路线,一种是多级NAT(如NAT444)技术,另一种是IPv6技术,这两种技术是完全对立的。从长远来看,NAT技术并不能从根本上解决地址短缺的问题,而且会增加网络结构的复杂性。目前,业界已达成共识:IPv6技术是当前可行的解决IP地址短缺唯一根本的解决方案。但是由于IPv6与IPv4技术不兼容,而且现网中有大量的IPv4设备和用户存在,需要在网络演进过程中解决异构网络的共存与互通问题。 IPv4向IPv6过渡的3个阶段当前,大量的网络是IPv4网络,随着IPv6的部署,很长一段时间是IPv4与IPv6共存的过渡阶段。通常将IPv4向IPv6过渡分为3个阶段:初始阶段IPv4网络占绝对的主导地位,IPv4网络中出现若干IPv6孤岛,这些孤岛通过IPv4网络连接到一起。共存阶段随着IPv6网络的部署,IPv6得到较大规模的应用,出现若干骨干IPv6网络,IPv6平台中的业务也不断增加。但不同的IPv6网络之间需要通过IPv4网络连接到一起,以及IPv4主机与IPv6主机的互通。这阶段不但要使用双栈技术、隧道技术,还需要网络协议转换技术主导阶段IPv6网络和主机占主导地位。当IPv6发展到后来,骨干网全部是IPv6,而IPv4网络成了孤岛。类似于发展初级阶段,主要采取隧道技术来部署,但现在隧道互联的是IPv4网络了。IPv4和IPv6共存互通的三个技术双栈所谓的双栈就是主机或者网络设备同时支持IPv4及IPv6双协议栈,如果节点支持双栈,那么它能够同时使用V4和V6的协议栈、同时处理IPv4及IPv6的数据。在双栈设备上,上层应用会优先选择IPv6协议栈,而不是IPv4。 比如,一个同时支持v4和v6的应用请求通过DNS请求地址,会先请求AAAA记录,如果没有,则再请求A记录。双栈是V4、V6并存及IPv6过渡技术的基础。隧道技术隧道技术是一种非常经典的解决方案,被应用在各种场景中解决数据通信问题。核心思想其实就是在两个通信孤岛之间搭建一条点到点的虚拟通道,使得此二者能够通过这条点到点隧道穿越中间的网络进行通信。NAT64NAT64技术实际上是一种协议转换技术,能够将分组在V4及V6格式之间灵活转换。当IPv4网络的节点需要直接与IPv6网络的节点进行通信时,默认情况下当然是行不通的,因为两个协议栈无法兼容。但是借助一台设备,由该设备来实现IPv6与IPv4的互转,那么上述通信需求就可以实现了。智能云网智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开放社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。欢迎各位前来体验。>>戳我了解更多<<
  • [技术干货] IGP与BGP
    IGP相关知识距离矢量路由协议-RIP,以及链路状态路由协议-OSPF。这是两个IGP内部网关路由协议,也就是工作在AS内的路由协议。AS的概念:Autonomous system 自治系统,指的是在同一个组织管理下使用相同策略的设备的集合。我们可以简单的将AS理解为一个独立的机构或者企业,例如中国联通。另一个AS的例子是一家大型企业的网络,在网络的规划上将全球各个区域划分为一个个AS:中国区是一个AS,南美区是一个AS以此类推。不同AS通过AS号区分,AS号取值范围1-65535,其中64512-65535是私有AS号,在组织内部可随意使用。IANA负责AS号的分发,如果要使用公有AS号,需要向IANA申请。BGP相关知识BGP,英文为Border Gateway Protocol,边界网关协议,是一种距离矢量路由协议,严格的说应该叫路径矢量路由协议,主要用于在AS之间传递路由信息,适用于大规模的网络环境,Internet的骨干网络正是得益于BGP才能承载如此大批量的路由前缀。总的来说,无论是内部网关路由协议,或者外部网关路由协议,最终的目的都是为了实现路由的互通,从而最终实现数据的互通。eBGP邻居和iBGP邻居eBGP邻居:位于不同AS的BGP路由器之间的BGP邻接关系两个eBGP邻居所属AS号不同Peer命令所指定的IP地址要路由可达,并且TCP连接能够建立iBGP邻居:位于相同AS的BGP路由器之间的BGP邻接关系两个IBGP邻居所属AS号相同Peer命令所指定的IP地址要路由可达,并且TCP连接能够建立智能云网智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开放社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。欢迎各位前来体验。>>戳我了解更多<<
  • [技术探讨] [技术干货] WAC配置HACA认证
    1、配置无线业务 单击“新建”,进入“基本信息”页面。 配置SSID名称、转发模式、业务VLAN ID等信息。 选择认证方式为Portal认证,取消选择“MAC优先外置Portal”。在“外置Portal服务器配置”页签下配置服务器名称、服务器IP地址(AC3.0南向IP:乾坤云南向:139.9.137.139)、共享密钥、报文端口号和服务器URL(https://portalserver ip:19008/portal | http://portalserver ip:8445/portal)(乾坤云:https://device.qiankun-saas.huawei.com:19008/portal),在“外置Radius服务器配置”页签下配置服务器名称、认证服务器IP地址、服务器端口号和共享密钥。 单击“下一步”,进入“接入控制”页面。 选择“绑定AP组”。 单击“完成”。 2、创建HACA服务器模板乾坤云认证南向:139.9.137.139可在设备上使用如下命令行查看设备证书,下图为新证书,端口50301,老证书为503003、创建potal服务器模板乾坤云认证南向:139.9.137.139URL:https://device.qiankun-saas.huawei.com:19008/portalAC-MAC关键字填:wac-mac用户访问URL关键字:redirect-url用户IP地址关键字:uaddress用户MAC关键字:umacssid关键字:ssid4、VAP模板中找到刚创建的SSID,将认证模板中的portal模板使用协议修改为HACA协议,选择刚创建的Portal服务器组5、删除引用的RADIUS模板,在HACA模板中引用之前创建的模板6、修改认证方案模板第一认证模式为HACA认证 AC3.0云管理侧配置1、  配置》站点配置》WAC(Fit AP)认证,点击创建2、填写认证名称,SSID名称与AC配置保持一致无特殊诉求,推送方式选择快速推送,如对页面有定制诉求,可选择高级推送高级推送需创建portal页面推送策略创建完成后即可进行访客账户注册登录 设备关键配置#authentication-profile name wifi-portal      (认证模板)                                  mac-access-profile wifi-portal            (MAC接入模板)                                    portal-access-profile wifi-portal           (Portal模板)                                  web-description haca+mac                                                       authentication-scheme wifi-portal         (认证方案模板)                                    haca-server ac3.0-HACA                 (HACA模板)#                                                                              haca-server template ac3.0-HACA          (HACA模板)                                     haca-server server-address 139.9.137.139 50301 default                         haca enable                                                                   #                                                                              url-template name wifi-portal             (URL及选项配置)                                     url https://***:19008/portal                                         url-parameter device-mac wac-mac redirect-url redirect-url ssid ssid user-ipaddress uaddress user-mac umac                                                    #web-auth-server AC3.0                  (Portal模板)                                            server-ip 139.9.137.139                                                        port 50100                                                                     url-template wifi-portal                                                        protocol haca                                                                 #portal-access-profile name wifi-portal      (Portal模板)                                    web-auth-server AC3.0 direct                                                  #aaaauthentication-scheme wifi-portal        (认证方案模板)                                      authentication-mode haca#                                                                              wlansecurity-profile name wifi-portal-haca     (安全模板)ssid-profile name wifi-portal-haca        (SSID模板)                                     ssid wifi-portal-hacavap-profile name wifi-portal-haca        (VAP模板)                                      forward-mode tunnel                                                            service-vlan vlan-id 101                                                       ssid-profile wifi-portal-haca                                                  security-profile wifi-portal-haca                                              authentication-profile wifi-portal#mac-access-profile name wifi-portal       (MAC免认证模板)#
  • [行业资讯] 万物互联时代下,企业如何加速布局物联网
    物联网(Internet of Things)概念最早于1999年被提出,经过20余年的发展,物联网已在无数个场景实现商业落地。比如 To C 端的智能家电,To B领域的智慧园区、智慧工厂等,都是物联网技术比较成熟的应用领域。通俗地讲,物联网是指通过信息传感设备(例如无线传感器网络节点、射频识别设备传感器、GPS等信息传感器,红外感应器、全球定位系统、激光扫描器等)按约定的协议,把任何物品与互联网连接起来,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络。发展到今天,物联网正在从简单的监测和自动化,向综合调度、精准决策等高级阶的方向迭代更新。物联网VS互联网物联网,即物物相连的互联网。以汽车开锁为例,用户通过手机APP远程进行操作后,指令从接入互联网的物(手机)发送到云平台,云平台追踪到接入互联网的物(车端电脑)下发指令,车执行完命令后,交执行结果反馈至云平台。此时,用户的整个操作被记录在云端,随时可通过手机APP查询历史记录。这是常见的物联网场景,“物”接入互联网,数据和信息互联互通汇聚到云端,通过人机交互完成操作。因此,物联网是基于互联网发展和扩展而来的互联网络,通过物与物的互联,实现动态监测和智能感知。物联网的分层架构物联网分为感知层、网络层、应用层三层架构。感知层由终端设备履行,负责执行下达的指令;应用层指前端业务平台,通过人机交互为不同场景赋能,如智慧园区、智慧工厂等。而网络层利用多种通讯技术,遵循标准协议,让物与服务器进行联接。由于不同硬件间的寻址、运算等能力不同,网络层分为两种:局域网联接和广域网联接。局域网联接,指不具备独立寻址及运算能力的传感器与网关之间的联接,如WIFI和蓝牙,有对应的协议;广域网联接指具备独立寻址及运算能力的设备直接接入,如 NB-IoT,并与数据中心或云平台的中控平台连接。所有的接入技术,都要通过标准的传输协议,才能实现数据采集与互通。当下常见的物联网协议 MQTT、MQTT-SN、CoAP、LwM2M、HTTP、LoRaWAN、NB-IoT。常见的物联网协议物联网场景复杂多样,设备条件、网络稳定性、设备功耗、设备连接数量等因素差异较大,造成物联网设备的传输与互联网在着很大的不同,因此产生了多种物联网通讯协议。从功能角度划分,协议分为物理层协议,负责设备间的组网及通讯,包含 3G/4G/5G、NB-IoT、WIFI、ZigBee;以及应用层协议,主要负责运行在传统互联网TCP/IP协议上的通讯设备,常见的包含HTTP、MQTT、CoAP等。从应用视角来看,协议可以分为云端协议和网关协议。云端协议指建立在 TCP/IP 上的协议,支持 TCP/IP 的设备可以通过 WIFI 及以太网,使用 HTTP、MQTT 等接入云端;网关协议适用于短距通信无法直接上云的协议,如蓝牙、ZigBee 等。当前物联网协议呈多元发展,甚至各种协议间可以互补,企业需要根据技术特性、应用场景等需求,在实际项目中选择合适的物联网协议。物联网的应用场景物联网是物物之间的互联,是基于物品对本身或周围环境的感知而触发的自动化应用场景,在高传感密度和高网络覆盖的前提下,可以在动态监测、状态调度、自动化操作和大数据分析领域创造价值,如智慧电力、智慧园区、智慧城市、智能制造等应用场景。艾艺智慧电力案例中的物联网应用在艾艺为某电力企业打造的智慧电力项目中,面对供电侧和用电侧大量的物联网终端,设备接入的复杂性成为一大挑战。艾艺设计的汇聚网关和边缘接入网关支持GPRS、4G/5G、LoRa、WIFI、ZigBee等多种无线通信方式,为客户在多样场景提供灵活多样的组网选择。支持HTTPS/MQTT TLS安全通道连接云端。汇聚网关采用分布式部署,通过集中管理,实现设备即插即用,快速接入云端,减少项目实施的人力成本和时间成本。边缘接入网关拥有高效微服务能力,适合超低时延、高效能的业务场景。艾艺智慧园区案例中的物联网应用智慧园区项目包含安全监管、信息展示、环境监测、智慧停车、楼宇监测、能耗监控等多个体系,需要接入大量的物联网终端,面临综合布线、设备接入、统一管理等挑战。此项目中存在大量移动设备部署在网线无法触达的边缘地带,采用“泛化联接”方式,通过5G、WIFI等无线网格承载,让海量数据被统一收集、分析、处理。系统采用微服务分布式系统架构,各节点都可实现集群部署;集成3S技术实时监测园区内人员位置、设备监测;应用系统采用B/S架构,集中式与分布式相结合,保障安全与可扩展性。艾艺致力于为企业提供智慧园区、智慧工厂、智慧能源等一体化解决方案。在物联网布局环节,向下连接智能终端设备,向上集成行业应用,在“多协议接入、多渠道接入、多网络接入”方面有丰富的服务经验和成熟应用,大大提升企业的设备管理能力,提供多种安全防护措施,保障数据安全和设备监测。艾艺物联网数据中台解决方案通过开放标准的 MQTT、CoAP 和 LwM2M 协议连接任何设备,灵活应对智慧园区、工业场景中的复杂多样的情况,同时支持通过边缘工业协议网关软件 Neuron 转换成统一的 MQTT 协议接入,满足绝大多数物联网场景下的数据采集需求,为企业的物联网业务提供高效可靠的数据接入层。
  • [demo资源] 【设备开发】小熊派IoT开发套件(BearPi-IoT)——智慧烟感
    简介本实验基于NB-IoT和WIFI实现智慧烟感案例,实现实时数据的采集,实现命令下发的响应,实现端云互通。E53_SF1扩展板采用了E53标准接口,包含了一个可燃气体传感器MQ-2,一个无源蜂鸣器,一个LED,其中无源蜂鸣器使用定时器输出PWM信号控制,LED使用普通GPIO控制,可燃气体传感器的数据使用ADC读取。开发前准备环境准备已注册华为云官方帐号。未注册可点击注册页面完成注册。已完成实名制认证。未完成可在华为云上点击实名认证完成认证,否则无法使用设备接入功能。已开通设备接入服务。未开通则访问设备接入服务,点击“免费试用”后开通该服务。IDE:Huawei LiteOS Studio45+(含扩展插件)硬件准备开发板:小熊派开发板(含NB卡、NB35-A通信扩展板、WIFI通信扩展板、E53_SF1案例扩展板)环境配置硬件连接NB35-A通信扩展板需要安装SIM卡,并注意卡的缺口朝外插入。将串口选择开关拨到MCU模式,并用USB线将开发板与电脑连接。NB35-A通信扩展板 WIFI通信扩展板 IDE安装配置工具下载工具安装驱动安装解压ST-Link.zip,根据操作系统类型,双击配套的执行文件进行安装。开始使用步骤 1 创建产品1. 登录设备接入-控制台,单击左侧导航栏“产品”,单击页面右上角的“创建产品”。2. 根据页面提示填写参数,然后单击“确定”,完成产品的创建。方案①:CoAP协议+二进制码流方案②:MQTT协议+JSON所属资源空间:选择默认资源空间产品名称:自定义,如Smoke-coap协议类型:选择“LwM2M/CoAP”数据格式:选择“二进制码流”厂商名称:自定义,如Huawei所属行业:选择“无”设备类型:自定义,如Smoke所属资源空间:选择默认资源空间产品名称:自定义,如Smoke-mqtt协议类型:选择“MQTT”数据格式:选择“JSON”厂商名称:自定义,如Huawei所属行业:选择“无”设备类型:自定义,如Smoke 3. 单击“查看详情”,进入产品详情页。步骤 2 上传模型文件1. 在产品详情页“模型定义”页签,单击“上传模型文件”。2. 单击“添加文件”,选择产品模型文件,并单击“确定”。方案①:CoAP_Smoke.zip方案②:MQTT_Smoke.zip3. 单击“确认”,关闭上传成功提示窗口。步骤 3 (可选)开发编解码插件仅方案①需要开发编解码插件,方案②请跳过此步骤。1. 在产品详情页“插件开发”页签,单击“图形化开发”,进入插件开发页面。2. 在页面右上角选择“更多 > 图形化开发导入”3. 单击“添加文件”,选择插件图形化开发包,并单击“确定”。获取插件开发包:onlineCodec_Smoke.zip4. 单击页面右上角“保存”,保存修改。5. 单击“部署”,弹窗提示如下,单击“确认”,进行部署。出现如下提示,表示在线插件部署成功。步骤 4 注册设备1. 在左侧导航栏选择“ 设备 > 所有设备”,单击右上角“注册设备”。2. 填写参数后,单击“确定”。所属资源空间:选择默认资源空间所属产品:选择步骤1 创建产品已创建的产品设备标识码:若是NB35-A通信扩展板,填写模组IMEI(通过AT+CGSN=1查询获取);若是WIFI通信扩展板,填写自定义字符串,如Vz_SF1_20220202200808设备名称:自定义,如Smoke_01设备认证类型:选择“密钥”密钥/确认密钥:自定义,如123456783. 设备创建成功,单击“保存并关闭”。下载保存的“DEVICES-KEY.txt”文件中记录了设备id和密钥,请妥善保管。步骤 5 导入项目工程1. 获取项目工程代码包并解压(注:路径不要包含中文、空格)。获取项目工程:IoT_Device_Demo.zip2. 启动HUAWEI LiteOS Studio工具,单击“Open Project”,打开项目工程。3. 项目工程预览如下:步骤 6 修改配置参数方案①+NB35-A通信扩展板:1. 打开“targets\STM32L431_BearPi\.config”文件,修改配置参数,并按“Ctrl+S”保存修改。CONFIG_UARTAT_BAUDRATE:9600CONFIG_USER_DEMO:oc_smoke_template启用#NB-IoT后的CONFIG_BOUDICA150_ENABLE不启用#WIFI和#MQTT后的配置项(行前#表示该行内容为注释,即配置不生效)... CONFIG_UARTAT_BAUDRATE=9600 ... CONFIG_IOT_LINK_CONFIGFILE="iot_config.h" # Demo CONFIG_USER_DEMO="oc_smoke_template" # NB-IoT CONFIG_BOUDICA150_ENABLE=y # WIFI #CONFIG_OCLWM2MTINY_ENABLE=y #CONFIG_LWM2M_AL_ENABLE=y #CONFIG_WAKAAMALWM2M_ENABLE=y #CONFIG_TCIP_AL_ENABLE=y #CONFIG_ESP8266_ENABLE=y #CONFIG_ESP8266_SSID="IoTdebug" #CONFIG_ESP8266_PWD="IoTdebug" # MQTT #CONFIG_MQTT_AL_ENABLE=y #CONFIG_PAHO_MQTT=y #CONFIG_PAHO_CONNECT_TIMEOUT=10000 #CONFIG_PAHO_CMD_TIMEOUT=10000 #CONFIG_PAHO_LOOPTIMEOUT=10 #CONFIG_PAHO_SNDBUF_SIZE=2048 #CONFIG_PAHO_RCVBUF_SIZE=2048 #CONFIG_DTLS_AL_ENABLE=y #CONFIG_MBEDTLS_ENABLE=y #CONFIG_MBEDTLS_PSK=y2. 打开“targets\STM32L431_BearPi\iot_config.h”文件,修改配置参数,并按“Ctrl+S”保存修改。CONFIG_UARTAT_BAUDRATE:9600CONFIG_USER_DEMO:oc_smoke_template启用/*NB-IoT*/后的CONFIG_BOUDICA150_ENABLE不启用/*WIFI*/和/*MQTT*/后的配置项(行前//表示该行内容为注释,即配置不生效)... #define CONFIG_UARTAT_BAUDRATE 9600 ... #define CONFIG_IOT_LINK_CONFIGFILE "iot_config.h" /*Demo*/ #define CONFIG_USER_DEMO "oc_smoke_template" /*NB-IoT*/ #define CONFIG_BOUDICA150_ENABLE 1 /*WIFI*/ // #define CONFIG_OCLWM2MTINY_ENABLE 1 // #define CONFIG_LWM2M_AL_ENABLE 1 // #define CONFIG_WAKAAMALWM2M_ENABLE 1 // #define CONFIG_TCIP_AL_ENABLE 1 // #define CONFIG_ESP8266_ENABLE 1 // #define CONFIG_ESP8266_SSID "IoTdebug" // #define CONFIG_ESP8266_PWD "IoTdebug" /*MQTT*/ // #define CONFIG_CJSON_ENABLE 1 // #define CONFIG_MQTT_AL_ENABLE 1 // #define CONFIG_PAHO_MQTT 1 // #define CONFIG_PAHO_CONNECT_TIMEOUT 10000 // #define CONFIG_PAHO_CMD_TIMEOUT 10000 // #define CONFIG_PAHO_LOOPTIMEOUT 10 // #define CONFIG_PAHO_SNDBUF_SIZE 2048 // #define CONFIG_PAHO_RCVBUF_SIZE 2048 // #define CONFIG_DTLS_AL_ENABLE 1 // #define CONFIG_MBEDTLS_ENABLE 1 // #define CONFIG_MBEDTLS_PSK 13. 打开“targets\STM32L431_BearPi\Demos\oc_smoke_template\oc_smoke_template.c”文件,修改相关参数,并按“Ctrl+S”保存修改。cn_endpoint_id:设备标识码cn_app_server:华为云IoT平台CoAP协议接入地址。cn_app_port:华为云IoT平台CoAP协议接入端口。... #define cn_endpoint_id "xxx" #define cn_app_server "119.3.250.80" #define cn_app_port "5683" ...方案①+WIFI通信扩展板:1. 打开“targets\STM32L431_BearPi\.config”文件,修改配置参数,并按“Ctrl+S”保存修改。CONFIG_UARTAT_BAUDRATE:115200CONFIG_USER_DEMO:oc_smoke_template停用#NB-IoT后的CONFIG_BOUDICA150_ENABLE(行前加#号注释掉该行)启用#WIFI后的配置项(去掉行前的#号),并将CONFIG_ESP8266_SSID和CONFIG_ESP8266_PWD修改为自己手机热点或者路由器热点的用户名密码;... CONFIG_UARTAT_BAUDRATE=115200 ... CONFIG_IOT_LINK_CONFIGFILE="iot_config.h" # Demo CONFIG_USER_DEMO="oc_smoke_template" # NB-IoT #CONFIG_BOUDICA150_ENABLE=y # WIFI CONFIG_OCLWM2MTINY_ENABLE=y CONFIG_LWM2M_AL_ENABLE=y CONFIG_WAKAAMALWM2M_ENABLE=y CONFIG_TCIP_AL_ENABLE=y CONFIG_ESP8266_ENABLE=y CONFIG_ESP8266_SSID="IoTdebug" CONFIG_ESP8266_PWD="IoTdebug" # MQTT #CONFIG_MQTT_AL_ENABLE=y #CONFIG_PAHO_MQTT=y #CONFIG_PAHO_CONNECT_TIMEOUT=10000 #CONFIG_PAHO_CMD_TIMEOUT=10000 #CONFIG_PAHO_LOOPTIMEOUT=10 #CONFIG_PAHO_SNDBUF_SIZE=2048 #CONFIG_PAHO_RCVBUF_SIZE=2048 #CONFIG_DTLS_AL_ENABLE=y #CONFIG_MBEDTLS_ENABLE=y #CONFIG_MBEDTLS_PSK=y2. 打开“targets\STM32L431_BearPi\iot_config.h”文件,修改配置参数,并按“Ctrl+S”保存修改。CONFIG_UARTAT_BAUDRATE:115200CONFIG_USER_DEMO:oc_smoke_template停用/*NB-IoT*/后的CONFIG_BOUDICA150_ENABLE(行前加//注释掉该行)启用/*WIFI*/后的配置项(去掉行前的//号),并将CONFIG_ESP8266_SSID和CONFIG_ESP8266_PWD修改为自己手机热点或者路由器热点的用户名密码;... #define CONFIG_UARTAT_BAUDRATE 115200 ... #define CONFIG_IOT_LINK_CONFIGFILE "iot_config.h" /*Demo*/ #define CONFIG_USER_DEMO "oc_smoke_template" /*NB-IoT*/ // #define CONFIG_BOUDICA150_ENABLE 1 /*WIFI*/ #define CONFIG_OCLWM2MTINY_ENABLE 1 #define CONFIG_LWM2M_AL_ENABLE 1 #define CONFIG_WAKAAMALWM2M_ENABLE 1 #define CONFIG_TCIP_AL_ENABLE 1 #define CONFIG_ESP8266_ENABLE 1 #define CONFIG_ESP8266_SSID "IoTdebug" #define CONFIG_ESP8266_PWD "IoTdebug" /*MQTT*/ // #define CONFIG_CJSON_ENABLE 1 // #define CONFIG_MQTT_AL_ENABLE 1 // #define CONFIG_PAHO_MQTT 1 // #define CONFIG_PAHO_CONNECT_TIMEOUT 10000 // #define CONFIG_PAHO_CMD_TIMEOUT 10000 // #define CONFIG_PAHO_LOOPTIMEOUT 10 // #define CONFIG_PAHO_SNDBUF_SIZE 2048 // #define CONFIG_PAHO_RCVBUF_SIZE 2048 // #define CONFIG_DTLS_AL_ENABLE 1 // #define CONFIG_MBEDTLS_ENABLE 1 // #define CONFIG_MBEDTLS_PSK 13. 打开“targets\STM32L431_BearPi\Demos\oc_smoke_template\c”文件,修改相关参数,并按“Ctrl+S”保存修改。cn_endpoint_id:设备标识码cn_app_server:华为云IoT平台CoAP协议接入地址。cn_app_port:华为云IoT平台CoAP协议接入端口。... #define cn_endpoint_id "xxx" #define cn_app_server "119.3.250.80" #define cn_app_port "5683" ...步骤 7 编译烧录1. 单击进行编译,单击进行烧录。如果修改了.config文件和iot_config.h文件,请单击全量重新编译,否则修改点可能不会生效。2。 单击打开串口终端,选择端口,设置波特率115200,开启串口,可以在接收区查看到打印的日志信息。3. 在LCD屏上,可以看到实时数据显示。步骤 8 调试运行1. 在物联网平台中,可以看到设备实时上报属性数据。2. 在物联网平台中下发控制命令(开启蜂鸣器),查看命令下发结果及开发板的响应。注:当前MQTT设备仅支持同步命令下发,NB设备仅支持异步命令下发。----结束示例代码案例程序文件:"targets\STM32L431_BearPi\Demos\oc_smoke_template\oc_smoke_template.c"#include <stdint.h> #include <stddef.h> #include <string.h> #include <osal.h> #include <oc_lwm2m_al.h> #include <link_endian.h> #include <gpio.h> #include <stm32l4xx_it.h> #include "lcd.h" //驱动头文件 #include "E53_SF1.h" typedef unsigned char int8u; typedef char int8s; typedef unsigned short int16u; typedef short int16s; typedef unsigned char int24u; typedef char int24s; typedef int int32s; typedef char string; typedef char array; typedef char varstring; typedef char variant; //连接平台基本变量 #define cn_endpoint_id "smoke1220" #define cn_app_server "119.3.250.80" #define cn_app_port "5683" //MessageID #define cn_app_Smoke 0x5 #define cn_app_response_Smoke_Control_Beep 0x7 #define cn_app_Smoke_Control_Beep 0x6 //消息结构体 #pragma pack(1) typedef struct { int8u messageId; int16u Smoke_Value; } tag_app_Smoke; typedef struct { int8u messageId; int16u mid; int8u errcode; int8u Beep_State; } tag_app_Response_Smoke_Control_Beep; typedef struct { int8u messageId; int16u mid; string Beep[3]; } tag_app_Smoke_Control_Beep; #pragma pack() //存储数据的变量 E53_SF1_Data_TypeDef E53_SF1_Data; //if your command is very fast,please use a queue here--TODO #define cn_app_rcv_buf_len 128 static int s_rcv_buffer[cn_app_rcv_buf_len]; static int s_rcv_datalen; static osal_semp_t s_rcv_sync; //use this function to push all the message to the buffer static int app_msg_deal(void *usr_data, en_oc_lwm2m_msg_t type, void *data, int len) { unsigned char *msg; msg = data; int ret = -1; if(len <= cn_app_rcv_buf_len) { if (msg[0] == 0xaa && msg[1] == 0xaa) { printf("OC respond message received! \n\r"); return ret; } memcpy(s_rcv_buffer,msg,len); s_rcv_datalen = len; (void) osal_semp_post(s_rcv_sync); ret = 0; } return ret; } //下发命令处理任务 static int app_cmd_task_entry() { int ret = -1; tag_app_Response_Smoke_Control_Beep Response_Smoke_Control_Beep; tag_app_Smoke_Control_Beep *Smoke_Control_Beep; int8_t msgid; while(1) { if(osal_semp_pend(s_rcv_sync,cn_osal_timeout_forever)) { msgid = s_rcv_buffer[0] & 0x000000FF; switch (msgid) { case cn_app_Smoke_Control_Beep: Smoke_Control_Beep = (tag_app_Smoke_Control_Beep *)s_rcv_buffer; printf("Smoke_Control_Beep:msgid:%d mid:%d", Smoke_Control_Beep->messageId, ntohs(Smoke_Control_Beep->mid)); /********** code area for cmd from IoT cloud **********/ if (Smoke_Control_Beep->Beep[0] == 'O' && Smoke_Control_Beep->Beep[1] == 'N') { E53_SF1_Beep_StatusSet(ON); Response_Smoke_Control_Beep.messageId = cn_app_response_Smoke_Control_Beep; Response_Smoke_Control_Beep.mid = Smoke_Control_Beep->mid; Response_Smoke_Control_Beep.errcode = 0; Response_Smoke_Control_Beep.Beep_State = 1; oc_lwm2m_report((char *)&Response_Smoke_Control_Beep,sizeof(Response_Smoke_Control_Beep),1000); ///< report cmd reply message } if (Smoke_Control_Beep->Beep[0] == 'O' && Smoke_Control_Beep->Beep[1] == 'F' && Smoke_Control_Beep->Beep[2] == 'F') { E53_SF1_Beep_StatusSet(OFF); Response_Smoke_Control_Beep.messageId = cn_app_response_Smoke_Control_Beep; Response_Smoke_Control_Beep.mid = Smoke_Control_Beep->mid; Response_Smoke_Control_Beep.errcode = 0; Response_Smoke_Control_Beep.Beep_State = 0; oc_lwm2m_report((char *)&Response_Smoke_Control_Beep,sizeof(Response_Smoke_Control_Beep),1000); ///< report cmd reply message } /********** code area end **********/ break; default: break; } } } return ret; } //数据上报任务 static int app_report_task_entry() { int ret = -1; oc_config_param_t oc_param; tag_app_Smoke Smoke; (void) memset(&oc_param,0,sizeof(oc_param)); oc_param.app_server.address = cn_app_server; oc_param.app_server.port = cn_app_port; oc_param.app_server.ep_id = cn_endpoint_id; oc_param.boot_mode = en_oc_boot_strap_mode_factory; oc_param.rcv_func = app_msg_deal; ret = oc_lwm2m_config(&oc_param); if (0 != ret) { return ret; } while(1) //--TODO ,you could add your own code here { Smoke.messageId = cn_app_Smoke; Smoke.Smoke_Value = htons((int)E53_SF1_Data.Smoke_Value); oc_lwm2m_report( (char *)&Smoke, sizeof(Smoke), 1000); osal_task_sleep(2*1000); } return ret; } //数据收集任务 static int app_collect_task_entry() { Init_E53_SF1(); while (1) { E53_SF1_Read_Data(); printf("\r\n******************************Smoke Value is %d\r\n", (int)E53_SF1_Data.Smoke_Value); LCD_ShowString(10, 170, 200, 16, 16, "Smoke Value is:"); LCD_ShowNum(140, 170, (int)E53_SF1_Data.Smoke_Value, 5, 16); osal_task_sleep(2*1000); } return 0; } int standard_app_demo_main() { osal_semp_create(&s_rcv_sync,1,0); //LCD屏幕显示 LCD_Clear(BLACK); POINT_COLOR = GREEN; LCD_ShowString(10, 10, 200, 16, 24, "Welcome to BearPi"); LCD_ShowString(40, 50, 200, 16, 24, "Smoke Demo"); LCD_ShowString(10, 90, 200, 16, 16, "NCDP_IP:"); LCD_ShowString(80, 90, 200, 16, 16, cn_app_server); LCD_ShowString(10, 130, 200, 16, 16, "NCDP_PORT:"); LCD_ShowString(100, 130, 200, 16, 16, cn_app_port); //创建任务 osal_task_create("app_collect",app_collect_task_entry,NULL,0x400,NULL,3); osal_task_create("app_report",app_report_task_entry,NULL,0x1000,NULL,2); osal_task_create("app_command",app_cmd_task_entry,NULL,0x1000,NULL,3); return 0; }参考详细了解IoT设备接入服务,请参考IoTDA帮助文档。修订记录发布日期文档版本修订说明2022/06/02V1.0文档首次发布