精华内容
下载资源
问答
  • meetme

    千次阅读 2012-08-17 11:37:26
    MeetMe 概要  MeetMe 会议桥 描述  语法:MeetMe([confno][,[options][,pin]])  用途: 让用户进入一个指定的MeetMe会议。如果省略了会议编号,系统会提示用户选择一个。(注意:MeetMe会议需要...

    MeetMe

    概要


      MeetMe 会议桥

    描述

      语法:MeetMe([confno][,[options][,pin]])

      用途: 让用户进入一个指定的MeetMe会议。如果省略了会议编号,系统会提示用户选择一个。(注意:MeetMe会议需要一个Zaptel时钟才能工作,你可以不装任何板卡,但是你需要安装Zaptel)

      参数:options可以为空,也可以设置一个或者多个参数,参数有如下一些:

    • '1' — 当会议室的第一个成员进入会议时,不向用户提示"you are currently the only person in this conference您是当前会议室唯一的成员" (Asterisk 1.2.11以上版本才支持)
    • 'a' — 设为管理员
    • 'A' — 设为标记成员
    • 'b' — 运行在${MEETME_AGI_BACKGROUND}指定的AGI脚本
      • 缺省: conf-background.agi (注意:需要会议室内有ZAP通道才能运行)
    • 'c' — 加入会议时提示会议成员数量
    • 'd' — 动态加入会议
    • 'D' — 动态加入会议,提示要求输入密码
      • 如果用户不想给会议设密码,可以直接按井
    • 'e' — 选择一个空会议。
    • 'E' — 选择一个没密码的空会议。
    • 'F' — 在会议中透传DTMF按键,所有成员都能收到DTMF。
    • 'i' —提示有成员加入/离开会议with review— 需要chan_zap.so (Asterisk 1.2以上版本才支持)
    • 'I' --提示有成员加入/离开会议 without review
    • 'M' —当会议室只有一个人的时候放等待音乐
    • 'm' —旁听状态(只能听,不能说)
    • 'p' —允许用户按井退出会议室
    • 'P' — 无论用户是否指定,总是提示用户输入会议密码
    • 'q' — 安静模式 (有成员加入/离开会议不做任何提示)
    • 'r' — 会议录音 (录音文件名${MEETME_RECORDINGFILE},格式 ${MEETME_RECORDINGFORMAT})。缺省文件名是:meetme-conf-rec-${CONFNO}-${UNIQUEID} ,缺省格式是wav。 — 这个参数同样需要chan_zap.so。
    • 's' —收到*键的时候播放菜单,普通成员是普通菜单,管理员是管理员菜单('send' to menu)
    • 't' — 设为只说模式 (只说,不听)
    • 'T' — 设置说话人检测 (在manager interface 和 meetme list可以看到)
    • 'v' — 视频模式 (目前还不支持)
    • 'w' — 等待标记成员进入会议。
      • 在标记成员进入会议之前,所有成员只能听音乐。
    • ? 'X' — 允许用户输入${MEETME_EXIT_CONTEXT}里面的一个有效的单个数字来退出会议。如果${MEETME_EXIT_CONTEXT}没有定义,则从当前的内容里找有效数字。allow user to exit the conference by entering a valid single digit extension of the context specified in or the current context if that variable is not defined. (此参数不支持Asterisk v1.2.0版本)
    • 'x' — 当最后一个标记用户退出会议室的时候,关闭会议。


    参数详解

      参数 's'


      's' 和 'p' 参数不能跟 'X' 参数共同使用。

    • 普通成员: 按键*将听到语音菜单"Please press 1 to mute or unmute yourself"; Asterisk v1.2 版本现在支持对单独会议的单独成员进行音量调整。
    • 管理员(在加入会议的时候使用了 'a' 参数): 按键*将听到语音菜单"Press 1 to mute/unmute yourself, 2 to lock/unlock this conference"

      参数 'q'

      最好在 Asterisk v1.2以上版本用,早期版本的SIP通道会有延迟。

      参数 'r'

      在开始MeetMe()录音之前,要指定Set ${MEETME_RECORDINGFILE}的值。

      否则,录音文件将存放在/var/lib/asterisk/sounds目录下,该目录是存放系统提示音的,不适合存放录音文件。

      例如:

      exten => s,1,SetVar(MEETME_RECORDINGFILE=/var/conf_recording-${EPOCH}-${USER})
      exten => s,2,MeetMe(,rD) ;开设一个新会议,对会议录音,

      例子

      在meetme.conf 中设定一个会议室号为101,密码为123456的会议。
      exten => 500,1,MeetMe(101||123456)

      授权的会议

      exten => 18,1,Answer
      exten => 18,2,Wait(1)
      exten => 18,3,Authenticate(5678)
      exten => 18,4,MeetMe(18|p)
      exten => 18,5,Playback(vm-goodbye)
      exten => 18,6,Hangup

      动态会议室,用户需要按键输入要创建的会议室号

      exten => 9999,1,Wait(1)
      exten => 9999,2,MeetMe(|Md)

      注意:如果你加入参数'e', 按*将选择#会议室
      如果你需要为会议室设定一个密码,,请将 'd' 参数改为 'D' 。

      动态会议室123设为安静模式。如果用户foo 拨打分机号10,他将成为一个标记用户(’A’),foo离开会议后,会议室将被关闭,其他的拨打11的用户也将被迫离开会议室。

      exten => 10,1,MeetMe(123|Aqd)
      exten => 11,1,MeetMe(123|xqd)

      OEJ发表的回顾 (May 23, 2004)

      你发现这个简单得不能再简单的(not-so-simple-anymore)简单MeetMe会议桥了吗?这可是Asterisk的一个杀手级应用哦。它带来丰富的功能应用:

    • 多种渠道,包括VoIP 和 PSTN,都能参加的多方会议
    • 宣讲模式:一个说话人,众多的旁听者。
    • 管理功能:踢用户,让会议静音,锁定会议
    • 等待其他成员的时候可以收听等待音乐
    • 可以预设会议
    • 也可以动态创建会议(第一个成员将被告知会议号码)


      更多丰富命令包括

    • MeetMe – 加入会议 (有时候也用于创建新会议)
    • MeetMeAdmin – 踢人、锁定会议、让会议静音
    • MeetMeCount – 统计会议室内的成员名单


      在CLI 下面也可以管理MeetMe:

    • Meetme List all conferences
    • MeetMe kick 踢一个人
    • MeetMe kick 踢所有人
    • MeetMe list 列出会议室内的所有成员
    • MeetMe lock 锁定会议室,不再加人
    • MeetMe unlock 解锁会议室
    • MeetMe mute 禁止某个人发言
    • MeetMe unmute 允许某个人发言


      OEJ附加说明

    • 会议桥默认语音编码格式是ulaw。 如果采用其他编码,将额外占用CPU资源。
    • MEETMESECS参数包含了用户参加会议中的时长(以秒为单位)。
    • 改动meetme.conf无需重新加载,系统会自动读取
    • 在dial plan中,您可以通过meetmecount()和参数来限制参加会议的人数
    • MeetMe依赖Zaptel时钟,您需要安装Zaptel驱动,最好有一片Asterisk兼容的语音卡。
    • 潜规则
    • MeetMe应用需要一个时钟才能工作。 有几种方法可以获得时钟,其中Zaptel卡提供的工作时钟是一个不错的选择,如果你没有Zaptel卡,也可以使用ztdummy 时钟。
    • 动态会议 的工作方式可能跟你想得不太一样。很明显,动态会议的意思就是创建一个并未存在的会议。所以当用户A创建了一个会议号为200的会议之后,如果用户也来创建一个会议号为200的会议,那么用户B将被直接加入用户A的会议,而不会对用户B提示说已经会议号200已经被人用了。另外,如果用户A创建的这个#200会议有密码,那么用户B将听到密码无效的声音,然后系统会提示用户B重新输入一个要创建的会议号码。要想解决这个问题,我们能做的就是通过参数 'e' 来让系统自动分配会议号码。


    性能方面的考虑

      在ISDN PRI环境下开超过10个人的MeetMe会议

      我曾经发现在ISDN PRI环境下超过10个人的会议回发生啸叫。人们认为电信运营商已经对ISDN-PRI这样的纯数字化环境做过回声消除了,所以不需要再设置回声消除。然而事实并非如此。我在配置文件 /etc/asterisk/zapata.conf下面增加了下列的参数项,从而解决了这个问题:

      echocancel=yes
      echocancelwhenbridged=yes
      echotraining=yes

    架构和局限

      在Asterisk 1.2版本中,同时开很多个会议的时候可能会有些局限。目前大部分版本已经升到1.4及以上,也就不存在这些问题了,不再鏊述。

      关于参数'b' (AGI_BACKGROUND)

      网友疑问


      我看了论坛上一些老的帖子,但是还是有个疑问,是关于AGI_BACKGROUND的。如果我的机器上安装了Asterisk兼容板卡但是会议里没有加入Zap通道,只有SIP通道,那么SIP通道上的MEETME_AGI_BACKGROUND脚本能正常工作吗?

      回答

      不能正常工作。下面我们分析一下工作原理:

      合并输入的语音包,输出合并后的语音包,这些工作是在Zaptel驱动里面做的。对于真实的Zap通道,这个工作是在驱动层就请全部完成的。而对于非Zap通道,系统会创建一个Zap虚拟通道,然后在非Zap通道和Zap虚拟通道之间双向拷贝语音数据。

      看一下这部分源代码(在conf_run()中),我们会发现,conf_run() 函数要么执行AGI脚本,要么执行虚拟通道拷贝循环,不能同时执行两个。所以当你使用AGI脚本的时候,在非Zap 通道和Zap虚拟通道之间就没有任何连接了。

      拥有一块Asterisk卡或者dummy时钟驱动 (比如: ztdummy 或者 zaprtc) 都能使用MeetMe功能,但是这并不意味着你可以在参加会议的SIP通道上使用AGI:他们没有执行任何AGI的能力。你可以试下看,但是最终的结果一定是什么声音也得不到。

      还要注意的是,使用AGI将会使其他的一些内置功能,比如说静音、踢人和音乐等待等功能不能使用。

      AGI_BACKGROUND Pros/Cons

      使用AGI将会使其他的一些内置功能,比如说不用通过命令行实现静音、踢人和音乐等待等功能。

      参数 'p' (按#退出) 也不能用。录音功能也不能用。

      如果你需要把会议中的某个成员踢出去,首先需要停止该成员的AGI_BACKGROUND 任务。

      一旦AGI_BACKGROUND脚本停止,该成员就自动退出会议室了。

      所有的DTMF按键事件都被送到AGI_BACKGROUND 进程/脚本。所以你可以让你的.agi脚本不停地循环,捕获按键音,来决定怎样处理一个特定的按键。

      AGI_BACKGROUND 也开放了很多开发的编程机会。你可以使用进程间通讯(sockets, signals等等)来远程控制会议室(即: 基于外部时间或用户输入来给会议室放音)。

      从普通通话发起多方通话(邀请用户参加会议)

      下面我讲一下怎样从一个普通通话(两方通话)发起多方通话。主要是通过MeetMe和ChannelRedirect来实现。

      疑问: 在 Asterisk 1.4 版本中,我们是否需要用'ManagerRedirect'来替换 'ChannelRedirect'?

      下面是dialplan 例子:

      [default]
      exten => _XXX,1,Set(DYNAMIC_FEATURES=nway-start)
      exten => _XXX,n,Dial(SIP/${EXTEN})

      [dynamic-nway]
      exten => _XXX,1,Answer
      exten => _XXX,n,Set(CONFNO=${EXTEN})
      exten => _XXX,n,Set(MEETME_EXIT_CONTEXT=dynamic-nway-invite)
      exten => _XXX,n,Set(DYNAMIC_FEATURES=)
      exten => _XXX,n,MeetMe(${CONFNO},pdMX)
      exten => _XXX,n,Hangup

      [dynamic-nway-invite]
      exten => 0,1,Read(DEST,dial,,i)
      exten => 0,n,Set(DYNAMIC_FEATURES=nway-inv#nway-noinv)
      exten => 0,n,Dial(Local/${DEST}@dynamic-nway-dest,,g)
      exten => 0,n,Set(DYNAMIC_FEATURES=)
      exten => 0,n,Goto(dynamic-nway,${CONFNO},1)
      exten => i,1,Goto(dynamic-nway,${CONFNO},1)

      [dynamic-nway-dest]
      exten => _XXX,1,Dial(SIP/${EXTEN})

      [macro-nway-start]
      exten => s,1,Set(CONFNO=${FindFreeConf()})
      exten => s,n,ChannelRedirect(${BRIDGEPEER},dynamic-nway,${CONFNO},1)
      exten => s,n,Read(DEST,dial,,i)
      exten => s,n,Set(DYNAMIC_FEATURES=nway-inv#nway-noinv)
      exten => s,n,Dial(Local/${DEST}@dynamic-nway-dest,,g)
      exten => s,n,Set(DYNAMIC_FEATURES=)
      exten => s,n,Goto(dynamic-nway,${CONFNO},1)

      [macro-nway-ok]
      exten => s,1,ChannelRedirect(${BRIDGEPEER},dynamic-nway,${CONFNO},1)

      [macro-nway-notok]
      exten => s,1,SoftHangup(${BRIDGEPEER})

      注意:你需要用 FindFreeConf() 函数 (或者其他方式) 来获得空闲的会议室号码。

      此外,还需要修改 features.conf,增加下面的内容:

      [applicationmap]
      nway-start => *0,caller,Macro,nway-start
      nway-inv => **,caller,Macro,nway-ok
      nway-noinv => *#,caller,Macro,nway-notok

    (译注:事实上,FindFreeConf()这个函数好像需要Trunk版本支持,需要修改一下这个例子的部分内容才能运行。另外,实际测试中我们也发现,两个按键*0之间的间隔时间不能太长,最好是连续按键。)

      工作原理:

      普通通话情况下:

      当你和别人通话的时候,按*0 (执行宏 nway-start)。 被叫马上被传递到一个空闲的会议室,而你将听到拨号音,等待你输入你要邀请的电话号码。当被邀请方接通后,你在和这个第三方通话的过程中,可以按 ** (在features.conf可以定义)加入会议,按 *# 挂掉他然后返回会议。

      会议室情况下:

      在会议室里面,任何用户可以按0邀请其他用户加入会议,其他的步骤同上。

      合并会议

      这些可以使用使用 Asterisk local channels 和 Asterisk manager API来实现(一般使用AGI 或者Call Files) 。

      下面是一个合并会议123和会议124的OriginateAction例子:

      在dialplan (context = default):
      exten => 7799,1,Meetme(123|qd)
      exten => 7798,1,Meetme(124|qd)

      在Manager API:
      Action: Originate
      ActionID: 12345678
      Channel: local/7798
      Context: default
      Exten: 7799
      Priority: 1

      与某个成员悄悄话

      在Meetme中,还有一个类似ChanSpy的悄悄话功能(密谈)。会议成员可以与其他成员通过'whisper'功能来密谈。

      我还增加了一个 'z' 标志:

      'z' — 所有的DTMF按键事件将被送到manager

      用户可以通过对MeetMe系统中的按键进行侦测,然后在决定在manager命令中如何处理。
    除了标准MeetMe之外的其他选择

      MeetMe2

      MeetMe2是在MeetMe基础上增加了Web控制界面的一个变体。

      "目的是控制会议室里面的声音和成员。这个功能可以为你提供一个通过网络来控制会议和直观查看会议的方法。app_meetme已经做了大量改动,将一些会议信息写入DB,并检查会议属性是否已经改变。"

      Q: 我看到会议中的成员,但是我不能把他们踢出去,也不能将他们的模式从说变成可听可说。没有显示任何错误。
      A: 在php中打开register_globals。
      你也可以在php文件的顶部加入"extract($_GET);"
    (也有网友建议使用MeetMe-Web-Control来替代MeetMe2)

      app_conference

      另外一个变种 app_conference,针对大容量的会议。
      http://sourceforge.net/projects/appconference/
      有些人认为它比MeetMe更为强大,但是目前还没有人提供详细的比较测试数据。

      远程会议主机

      通过第三方会议提供商: http://www.junctionnetworks.com,IAX和SIP通道可以加入远程会议。在dialplan里面可以这样写:
      exten => 7000,1,Dial(IAX2/conference@iax.jnctn.net)
      exten => 7000,1,Dial(SIP/conference@sip.jnctn.net)

      通过拨打7000,您就可以参加他们的会议。
      他们提供很多种参加会议的方法,可以通过Web网页来订制,方便了会议管理和统计。

    展开全文
  • 解释memset(a,'0',sizeof(a)); 的意思

    万次阅读 多人点赞 2018-07-25 20:04:30
    这条语句是把a中所有字节换做字符“0”,常用来对指针或字符串的初始化。 函数原型如下: void *memset(void *s, int ch, size_t n); 函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s...

    memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。

    这条语句是把a中所有字节换做字符“0”,常用来对指针或字符串的初始化。

    函数原型如下:
    void *memset(void *s, int ch, size_t n);
    函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s将ch设置为0
    综上可知
        原型:extern void *memset(void *buffer, int c, int count);
           
       用法:#include <string.h>
     
       功能:把buffer所指内存区域的前count个字节设置成字符c。
     
       说明:返回指向buffer的指针。
     
      举例:

    // memset.c
         
          #include <syslib.h>
          #include <string.h>

          main()
          {
            char *s="Golden Global View";
           
            clrscr();
           
            memset(s,'G',6);
            printf("%s",s);

            getchar();
            return 0;
          }

    展开全文
  • SAP 用户参数 ME_USE_GRID

    千次阅读 2019-02-11 10:34:17
    SAP 用户参数 ME_USE_GRID   SAP的一些标准报表格式极其不友好,如果不做特殊参数设定,报表使用起来很不方便。我们可以通过设置user parameter的方式,改变一些报表的显示格式,让其以ALV 列表形式显示结果,...

    SAP 用户参数 ME_USE_GRID

     

    SAP的一些标准报表格式极其不友好,如果不做特殊参数设定,报表使用起来很不方便。我们可以通过设置user parameter的方式,改变一些报表的显示格式,让其以ALV 列表形式显示结果,方便用户对报表结果做后续的处理。

     

    SU3 进入参数修改界面, 添加如下参数:参数: ME_USE_GRID  值: X

     

    这样一些格式不友好的报表就能以ALV格式显示了,比如ME1M,

     

    经查,除了ME1M报表,这个参数对以下报表均有效(支持SAP系统版本4.7及以上):
    ME06 Analyze source list
    ME0M Source list for material
    ME16 Deletion proposals for info records
    ME1E Quotation price history
    ME1L Info records for vendor
    ME1M Info records for material
    ME1P Purchase order price history
    ME1W Info records for material group
    ME91A, ME91E, ME91F Purchasing documents: reminders/urging letters
    ME92F, ME92K, ME92L Monitor order acknowledgments
    ME9A, ME9E, ME9F, ME9K, ME9L Message output
    MEQ6 Analyze quota arrangement
    MEQ8, MEQM Quota arrangement for material
    ME2S PO reporting with services
    ME3S Contract reporting with services
    CATM Import CATS data
    ML83 Print/transmit messages: service entry sheet
    ML84 List of service entry sheets

     

    2019-02-11 写于杭州市

     

    展开全文
  • ME3616 NBIOT模块基础使用指南

    千次阅读 2020-11-18 23:56:45
    ME3616 NBIOT模块使用指南简介前言硬件搭建外围电路核心串口电平转换天线其他天线开机复位电路模组AT指令流程易错提醒基础功能测试ME3616 TCP通信流程详解ME3616 UDP通信ME3616连接MQTT流程详解ME3616连接LWM2MME...

    简介

    在这里插入图片描述

    ME3616 是一款支持NB-IoT通信标准的窄带蜂窝物联网通信模组。在NB-IoT制式下,该模块可以提供最大66 Kbps上行速率和34 Kbps下行速率。该模块为极小尺寸LCC紧凑型封装模块,适用于可穿戴设备等对于模块尺寸有严格要求的应用领域。

    ME3616专为低速率、低功耗、远距离、海量连接的物联网应用而设计。该模组支持多种网络协议(CoAP、TCP/UDP、MQTT、OMA-LWM2M、oneNET)和多种低功耗模式(PSM、eDRX),并可支持GNSS定位功能和嵌入式eSIM。这些协议和功能可以让它应用在智能表计、智能停车、资产追踪和可穿戴设备等多种物联网及M2M的应用场景中。

    前言

    本教程旨在面向没有模组使用基础的用户,我尽可能的把繁杂的部分简化,让未接触过此类模组开发学生或者第一次接手该项目的朋友能够快速搭建最小系统用以测试,但是即便是如此,下面的简单设计也依旧是量产过,且经受考验的。

    硬件搭建

    外围电路

    在这里插入图片描述
    在这里,我提供一个最简化版本的模组外围电路,按此搭建,ME3616模组便可以正常使用且可与外部通信,
    [这里使用的是串口开发方案,即通过串口发送AT指令进行通信]

    核心

    在这里插入图片描述
    我就没有单独画电源了,因为该模组可以直接3.3V供电,和MCU处在同一电压域,你可以选择任何你需要的电源方案,DCDC或者是像常见的LDO例如ASM1117 3.3即可驱动,非常方便 [注:官方要求的电源能提供的最大电流需达到800ma,因不同制式下可能会出现瞬时大电流,但是平时模组电流并不大,毕竟NB模组就是针对低功耗设计的]。
    下图为官方指南:无论哪个版本,都可以在3.3V下正常工作。
    在这里插入图片描述
    在这里插入图片描述
    电源处尽可能最低满足有一颗最小100uf的低ESR储能电容[一般是用的3216的钽电容]为瞬时增大的电流提供供能,以及三颗图上所示的滤波电容,走线时经过电容尽可能按先大后小的顺序,以增强滤波效果。
    在这里插入图片描述
    这一路串口,是模组调试串口,通常用以给模组下载固件,画板时尽可能保留该接口,或者留下测试点,出现模组版本差异时方便升级模组。

    串口电平转换

    在这里插入图片描述
    ME3616模组的串口电平是1.8V,通常我们使用的USB转串口或者MCU都是TTL电平的,为了转换成TTL电平我们采用了这个电路以匹配电平,如果需要转换成其他电平,请自行设计。
    [注:三极管的选择需要注意开关频率是否满足波特率,推荐使用MMBT3904这个型号]

    天线

    在这里插入图片描述
    天线设计本应该是一个特别考验经验和技能的工作,什么射频阿,阻抗匹配阿,那些让没有经验的小白看着就头大,但是经过我们反复测试,该模组在信号良好时甚至不接天线都能正常通信,所以如果你没有设计过天线也不用担心,一定点的亮,一定能通信,你就放心,至于天线的选择,我推荐的方式是走线由MAIN_ANT引出,留出Π型网络【图示NC的部分,可以根据实际测试时调整数值,或者直接留空,但是画板时依旧建议保留焊盘】,直接连到ipx座子上,使用外部天线,如下图所示。
    在这里插入图片描述
    在这里插入图片描述
    这种座子即可,立创商城搜天线座子就有。

    其他天线

    我分别测试过PCB天线,塑料片儿天线,陶瓷天线,均能正常使用,但是外部天线是信号最好的,推荐使用外部天线,下图是我在个人做的一些小玩具上为了省空间使用的陶瓷天线,信号属于【还能用】。
    在这里插入图片描述

    开机复位电路

    在这里插入图片描述
    这个电路依旧很简单,简单的三极管和滤波电容做成的两个按键,其中MCU_RST,MCU_POWER可以连接MCU,通过MCU控制开关和复位。
    简述一下开机流程:POWER管脚拉低至少0.2s [对应按键按下0.2s或者MCU IO拉低],模组开始开机,REST引脚拉低一秒,则模组开始复位。

    那么基础的硬件部分就介绍完了,如果您还有什么疑问,可以在评论区留言,我会为您解答。

    模组AT指令流程

    易错提醒

    这里我只介绍常用的基础测试指令,复杂功能的实现请阅读相关datasheet。

    在指令收发前,我先针对常见错误做出一些整理
    1.为什么模组不响应
    (1)请确认上位机或者MCU程序设置了正确的波特率,ME3616默认频率为115200,后期可以指令修改。
    在这里插入图片描述

    (2)如果是直接连接的模组,是否已经做了电平转换,模组串口电平是1.8V,你的通信电平是否正确。
    2.为什么返回ERROR
    (1)请确认指令发送正确或完整,是否有多余的空格,因为模组是通过\r\n作为结束标志的
    (2)是否使用了中文符号,特别是双引号【“】,务必使用英文的双引号【"】

    /*这里的问号和双引号,在串口助手指令发送时请务必注意区分*/
    AT+CPIN? AT+CPIN?
    ”“		""
    

    (3)模组是否支持这条指令,发送指令加问号 [指令?] 会回显模组是否支持这个指令,有可能你使用的软件版本不支持该指令,则您需要升级模组固件,如果是硬件版本不支持,则需要更换其他型号的该模组。ATI查看模组软硬件版本。

    基础功能测试

    /* [响应OK则表示正常运行了]*/
    
    AT
    

    在这里插入图片描述

    /* 读取SIM卡的ICCID 【如果没插卡是无法读取的,请确认已经插入了物联网卡】*/
    
    AT*MICCID
    

    在这里插入图片描述
    【下图示为插入SIM卡的响应】
    在这里插入图片描述

    /* EPS网络注册状态,用以查询是否附着上网路,0,1则未注册上网络,附着上网络应该是0,1*/
    
    AT+CEREG?
    

    在这里插入图片描述
    【下图示为附着上网络】
    在这里插入图片描述

    /* 查询PIN状态,如果PING上网络,会响应READY*/
    
    AT+CPIN?
    

    在这里插入图片描述
    基础指令就到这里,以上指令都响应正确后,基本就可以开始后面的通信指令。

    ME3616 TCP通信

    以下是TCP测试的指令合集

    创建套接字通道
    AT+ESOC=1,1,1
    连接TCP服务器
    AT+ESOCON=0,8885,"219.144.130.27"
    发送数据
    AT+ESOSEND=0,8,3131313131313131 
    关闭套接字
    AT+ESOCL=0 
    

    先让我们看看通过串口助手收发的完整实际通信流程

    
    //[2020-11-18 21:38:59.692]# SEND ASCII>
    AT+ESOC=1,1,1						
    
    //[2020-11-18 21:38:59.798]# RECV ASCII>
    AT+ESOC=1,1,1
    
    +ESOC=0
    
    OK
    
    //[2020-11-18 21:39:59.699]# SEND ASCII>
    AT+ESOCON=0,32868,"122.114.122.174"
    
    //[2020-11-18 21:39:59.799]# RECV ASCII>
    AT+ESOCON=0,32868,"122.114.122.174"
    //[2020-11-18 21:40:00.207]# RECV ASCII>
    
    OK
    
    //[2020-11-18 21:40:12.451]# SEND ASCII>
    AT+ESOSEND=0,8,3131313131313131
    
    //[2020-11-18 21:40:12.590]# RECV ASCII>
    AT+ESOSEND=0,8,3131313131313131
    
    OK
    
    //[2020-11-18 21:40:24.044]# RECV ASCII>
    
    +ESONMI=0,5,68656c6c6f
    

    流程详解

    首先发送 AT+ESOC指令以创建套接字。
    这三个1的意思分别是:【使用ipv4】,【创建的是TCP套接字】,【使用ip】

    AT+ESOC=1,1,1
    

    之后模组会返回一个内部分配好的套接字通道句柄,我们后续的指令都是通过该编号操作。
    +ESOC=0 的 0 ,就是返回的套接字句柄编号,这个值为0-4,最多开五个通道。

    AT+ESOC=1,1,1
    
    +ESOC=0
    
    OK
    

    发送AT+ESOCON连接TCP服务器,这里的【0】是刚才模组分配的套接字句柄编号,这里的【32868】是端口,【“122.114.122.174”】是IP地址,端口不需要双引号包围,而IP地址需要双引号。

    AT+ESOCON=0,32868,"122.114.122.174"
    

    之后模组会如下响应,则表示已经连上TCP服务器。

    AT+ESOCON=0,32868,"122.114.122.174"
    OK
    

    发送AT+ESOSEND指令往服务器发送数据,【0】句柄【8】发送的数据长度,注意是按16进制数据发送的,所以是按16进制数的,不是数ascii数,【3131313131313131】要发送的16进制数据。

    AT+ESOSEND=0,8,3131313131313131
    

    之后模组会如下响应,表示发送成功

    AT+ESOSEND=0,8,3131313131313131
    
    OK
    

    如果从服务器发送数据,模组收到是什么样子的呢,如下所示,挂载的为【0】收到消息的句柄编号【5】长度【68656c6c6f】16进制数据。

    +ESONMI=0,5,68656c6c6f
    

    发送AT+ESOCL指令,关闭套接字,参数【0】为要关闭的套接字通道的句柄编号

    AT+ESOCL=0
    

    响应:

    AT+ESOCL=0
    
    OK
    

    有时候因为通道开太多了,开满了,则需要关闭点通道,如下所示。

    [2020-11-18 22:06:26.639]# SEND ASCII>
    AT+ESOC=1,1,1
    
    [2020-11-18 22:06:26.749]# RECV ASCII>
    AT+ESOC=1,1,1
    
    too much socket instance
    
    ERROR
    
    [2020-11-18 22:06:41.881]# SEND ASCII>
    AT+ESOCL=0
    
    [2020-11-18 22:06:41.984]# RECV ASCII>
    AT+ESOCL=0
    
    OK
    
    [2020-11-18 22:06:46.552]# SEND ASCII>
    AT+ESOC=1,1,1
    
    [2020-11-18 22:06:46.658]# RECV ASCII>
    AT+ESOC=1,1,1
    
    +ESOC=0
    
    OK
    

    掉线的情况,如果收到这种响应,则表明掉线,,可能是服务器关闭,或者被服务器踢掉了,具体情况需要根据返回值确定。

    +ESOERR=0,4
    

    那么关于TCP的基础通信就到这里了,如果还有什么疑惑,请在评论区指出。

    ME3616 UDP通信

    以下是UDP测试的指令合集

    创建套接字通道
    AT+ESOC=1,2,1 
    连接TCP服务器
    AT+ESOCON=0,7000,"219.144.130.27"
    发送数据
    AT+ESOSEND=0,8,3131313131313131 
    关闭套接字
    AT+ESOCL=0 
    
    
    //[2020-11-18 21:38:59.692] SEND ASCII>
    AT+ESOC=1,2,1 						
    
    //[2020-11-18 21:38:59.798] RECV ASCII>
    AT+ESOC=1,2,1
    
    +ESOC=0
    
    OK
    
    //[2020-11-18 21:39:59.699] SEND ASCII>
    AT+ESOCON=0,32868,"122.114.122.174"
    
    //[2020-11-18 21:39:59.799] RECV ASCII>
    AT+ESOCON=0,32868,"122.114.122.174"
    //[2020-11-18 21:40:00.207]# RECV ASCII>
    
    OK
    
    //[2020-11-18 21:40:12.451] SEND ASCII>
    AT+ESOSEND=0,8,3131313131313131
    
    //[2020-11-18 21:40:12.590] RECV ASCII>
    AT+ESOSEND=0,8,3131313131313131
    
    OK
    
    //[2020-11-18 21:40:24.044] RECV ASCII>
    
    +ESONMI=0,5,68656c6c6f
    

    和TCP连接几乎一模一样,只是创建套接字通道时候的参数不一样,就不细细讲解了。

    ME3616连接MQTT

    MQTT是物联网模组最常用的网络协议,这里我不介绍怎么创建MQTT云服务器,因为你们可能有自己搭建的现成的MQTT服务器,也或者是使用ONENET,阿里云提供的MQTT服务器,后续我会单独开个帖子介绍怎么注册ONENET和阿里云创建MQTT服务器,这里只展示怎么怎么指令连接MQTT,而测试例子使用ONENET服务器。

    首先MQTT有三元组,这是连接MQTT必备的。

       ProductKey:	 产品名称
    
       DeviceName:  设备名称
    
       DeviceSecret:设备秘钥,或者鉴权码。
    
       服务器IP地址和端口
    

    以下是MQTT测试的指令合集

    通过 TCP 与 MQTT 服务器建立 MQTT 链接,
    AT+EMQNEW="219.144.130.26","1883",12000,100 
    发送链接报文【DeviceName:642441370】【ProductKey:303574】【DeviceSecret:longfushanquan】
    AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"
    发送订阅报文
    AT+EMQSUB=0,"mytopic",1 
    发送发布报文
    AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"
    接收发布报文
    AT+EMQUNSUB=0,"mytopic" 
    发送取消订阅报文
    AT+EMQDISCON=0 
    

    接下来演示下完整流程

    
    [2020-11-18 23:17:10.754] SEND ASCII>
    AT+EMQNEW="183.230.40.39","6002",12000,100
    
    [2020-11-18 23:17:10.856] RECV ASCII>
    AT+EMQNEW="183.230.40.39","6002",12000,100
    [2020-11-18 23:17:11.812] RECV ASCII>
    
    +EMQNEW: 0
    
    OK
    
    [2020-11-18 23:17:13.696] SEND ASCII>
    AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"
    
    [2020-11-18 23:17:13.810] RECV ASCII>
    AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"
    
    [2020-11-18 23:17:14.300] RECV ASCII>
    
    OK
    
    [2020-11-18 23:17:17.094] SEND ASCII>
    AT+EMQSUB=0,"mytopic",1
    
    [2020-11-18 23:17:17.194] RECV ASCII>
    AT+EMQSUB=0,"mytopic",1
    
    [2020-11-18 23:17:17.514] RECV ASCII>
    
    OK
    
    [2020-11-18 23:17:19.759] SEND ASCII>
    AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"
    
    [2020-11-18 23:17:19.867] RECV ASCII>
    AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"
    
    [2020-11-18 23:17:20.663] RECV ASCII>
    
    OK
    
    [2020-11-18 23:17:21.688] RECV ASCII>
    
    +EMQPUB: 0, "mytopic", 1, 0, 0, 4, "31323334"
    
    [2020-11-18 23:17:24.868] SEND ASCII>
    AT+EMQDISCON=0
    
    [2020-11-18 23:17:24.966] RECV ASCII>
    AT+EMQDISCON=0
    
    [2020-11-18 23:17:25.029] RECV ASCII>
    
    OK
    

    流程详解

    发送AT+EMQNEW指令连接ONENET的MQTT服务器,ip地址183.230.40.39,端口6002,如果是ONENET的MQTT,都是这个接口

    AT+EMQNEW="183.230.40.39","6002",12000,100
    

    模组响应如下,会返回一个MQTT通道句柄【+EMQNEW: 0】,记住这个值【0】,后续都使用这个句柄

    AT+EMQNEW="183.230.40.39","6002",12000,100
    
    +EMQNEW: 0
    
    OK
    

    发送AT+EMQCON指令连接 MQTT,第一位 【0】 是上面返回的MQTT句柄,第二位【4】是指MQTT版本4,ONENET是使用的4,如果你在连接其他MQTT出现死活连接不上,则可以检查下MQTT版本是否一致,【642441370】client_id,如果是ONENET则对应的是设备id/设备名,即DeviceName【120】保活时间,【0】,【0】,【303574】username,对应ONENET的产品ID,【longfushanquan】password,对应ONENET的DeviceSecret/鉴权码。

    AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"
    

    连接成功会响应如下

    AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"
    
    OK
    

    发送AT+EMQSUB订阅TOPIC,第一位【0】依旧是MQTT通道ID,写程序的时候要注意处理这个值,【mytopic】是要订阅的topic,【1】是指Qos等级为1,

    AT+EMQSUB=0,"mytopic",1
    

    响应为

    AT+EMQSUB=0,"mytopic",1
    
    OK
    

    AT+EMQPUB往指定的TOPIC推送报文,【句柄】,【topic】,【1】QoS等级【0】保留标志【0】重复标志【4】长度,这里的长度是指16进制的长度,不是字符串的长度喔,【报文,16进制的字符串】

    AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"
    

    以下是指令响应

    AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"
    
    OK
    

    接下来,还会有一条服务器响应,因为我们刚才订阅了这个topic,所以我们发送的数据,我们也能收到。

    +EMQPUB: 0, "mytopic", 1, 0, 0, 4, "31323334"
    

    关闭MQTT通道,注意mqttid

    AT+EMQDISCON=0
    

    响应

    AT+EMQDISCON=0
    
    OK
    

    以上就是MQTT测试的全部内容了。

    ME3616连接LWM2M

    待更

    ME3616连接阿里云MQTT

    待更

    MCU通信方案

    待更

    常见错误处理

    待更

    展开全文
  • Asterisk命令MeetMe详解

    千次阅读 2012-03-13 09:58:19
    Asterisk命令MeetMe详解     MeetMe 概要  MeetMe 会议桥 描述  语法:MeetMe([confno][,[options][,pin]])  用途: 让用户进入一个指定的MeetMe会议。如果省略了会议编号,系统会提示...
  • 执行git commit命令提示:"Please tell me who you are" 意思是,Git想知道提交代码的是谁,造成这个现象的原因可能是第一次提交代码,也有可能是长时间不操作,需要重新验证下。 #解决方案 在Git控制台输入一下...
  • 本文主要介绍在Linux平台下进行中兴ME3720无线4G模块的驱动移植,并采用PPP的拨号方式进行拨号接通上网络。 该驱动主要包括本身系统的usb转串口驱动,和中兴提供的ndis口驱动,以及系统支持ndis口驱动需要加载的...
  • 采购订单BADI增强-ME_PROCESS_PO_CUST
  • kaggle链接:https://www.kaggle.com/c/GiveMeSomeCredit ipynb文件:...
  • Bjarne Stroustrup's C++ Style and Technique FAQ

    千次阅读 2010-06-10 18:28:00
    Bjarne Stroustrup's C++ Style and Technique FAQModified October 4, 2009Source: http://www2.research.att.com/~bs/bs_faq2....
  • asterisk中关于实现会议室meetme的笔记

    千次阅读 2010-05-14 14:01:00
    一、资料:1.http://www.osslab.org.tw/VoIP/IP_PBX/軟體式_IP_PBX/Asterisk/客製化的設計(Programming)/多人會議呼叫(n-...会议中邀请别人参加的一种做法转自:http://blog.sina.com.cn/s/blog_4b8c4a6001000bef.htm
  • 代入f(x),可以得到 6个点的概率分别为{ 0.0175283 0.1295176 0.3520653 0.3520653 0.1295176 0.0175283}。 代入公式可以得到 正态分布时骰子投掷的熵 =-(0.0175283*log2(0.0175283)+0....
  • 或 /oʊ'meɡə/ omega 奥米伽/欧米伽 欧姆、角速度、角频率、交流电的电角度、化学中的质量分数、不饱和度   折叠 Αα α代表: 三角形里第一个角,在 边 A...
  • 安装k8s 1.9.0 实践:问题集锦

    万次阅读 2018-03-21 19:49:52
    更多kubernetes文章:k8s专栏目录安装过程见 离线安装k8s 1.9.0安装资料参考见 k8s安装 1.9版本 官方文档 安装实践 离线安装包 视频 课程k8s 1.5 与 k8s 1.9的差别参照以前安装kubernetes 1.5.2失败,原因是...
  • 题目的大概意思是一只吸血鬼每次随机的选择n个洞中的任意一个,如果该吸血鬼的攻击值大于该洞ci那么直接可以花费Ti的时间就可以出去,不然要奋斗一天该吸血鬼攻击值增加ci再 随机选择n个洞.口设dp[i]表示攻击力为i时...
  • keyboard.S 部分代码分析(key_map) keyboard中间有这么一段,我一开始没看明白,究竟啥意思 key_map: .byte 0,27 .ascii "1234567890-=" .byte 127,9 .ascii "qwertyuiop[]" .byte 13,0 .ascii ...
  • 个人博客原文:kubernetes(k8s)中部署metrics-server遇到的问题 metrics-server版本:k8s.gcr.io/metrics-server-amd64:v0.3.3 k8s版本:v1.14.1 The '--source' flag is unavailable right now (v0.3.0-alpha.1) ...
  • Adobe Photoshop CC 2019 官方镜像+破解补丁都在...https://pan.baidu.com/s/1RHGUUgcARgGESO2QO3vTMA Adobe Premiere Pro 2019 直装破解版 https://pan.baidu.com/s/1Ej9D_2FYExM5xNNywvRSBA Adobe Media Encoder ...
  • CVS 提示错误的意思

    万次阅读 2010-11-24 11:55:00
    CVS 提示错误的意思
  • 一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败。于是排查了一下原因。问题来源 下面是etcd集群健康状态: [root@docker01 ~]# cd /opt/kubernetes/ssl/[root@docker01 ssl]# /opt/...
  • 1、删除kubeflow后namespace无法删除2、jupyter 】3、Node节点join的时候发生错误 ...[root@ master kubeflow]# kfctl delete -f kfctl_k8s_istio.0.7.0.yaml Error: couldn't delete KfApp: (kubeflow.er...
  • Android 高通平台 Camera C/S init 流程
  • 今天给同事 一个k8s 集群 出现not ready了 花了 40min 才搞定 这里记录一下 避免下载 再遇到了 不清楚. 错误现象:untime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:...
  • 一站式详解linux0.11内核head.s代码,适合初学linux0.11内核的人群观看,全文描述以第一人称,更能让你系统学习linux内核的编制过程。
  • 数海笔记(0)-程序员为什么要学数学

    千次阅读 2013-08-31 17:15:52
    And even if you're planning on being a scientist or an engineer, I've found it's much easier to learn and appreciate geometry and trig after you understand what exactly math is — where it came from, ...
  • R时间序列分析|S&P500股指的ARIMA模型预测与残差ARCH效应分析前言一、数据及分析目的二、数据探索三、ARIMA模型构建四、残差分析五、模型预测 前言 由于R语言对新手并不够友好,网上的资料相对也偏少,导致博主...
  • 浅谈面向对象五大原则 S.O.L.I.D

    千次阅读 2018-05-18 17:59:38
    浅谈面向对象五大原则 S.O.L.I.D Single Responsibility Principle(SRP) 单一职责原则 A class should have one and only one reason to change, meaning that a class should have only one job. ...
  • system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } 从题目可以知道,利用shellshock就可以攻击。env x='() { :;}; /bin/cat flag;' ./shellshock 11. coin1 考网络编程的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,327
精华内容 10,930
关键字:

s0me的意思