arduino, 基于PubNub的Official API !

分享于 

12分钟阅读

GitHub

  繁體 雙語
The Official PubNub Arduino-based API!
  • 源代码名称:arduino
  • 源代码网址:http://www.github.com/pubnub/arduino
  • arduino源代码文档
  • arduino源代码下载
  • Git URL:
    git://www.github.com/pubnub/arduino.git
    Git Clone代码到本地:
    git clone http://www.github.com/pubnub/arduino
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/pubnub/arduino
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    PubNub Arduino库

    使用Ethernet可以使用以太网屏蔽或者任何其他与Arduino事实标准 EthernetClient 兼容的网络硬件( 芯片/屏蔽),与PubNub云消息传递系统通信。 你的应用程序可以接收和发送消息。

    Copy-and-Paste-Ready代码 !

    查看发布和订阅服务器有多简单。

    概要

    
    void setup() {
    
    
    /* For debugging, set to speed of your choice */
    
    
     Serial.begin(9600);
    
    
    
    /* If you use some other HW, you need to do some other
    
    
     initialization of it here... */
    
    
     Ethernet.begin(mac);
    
    
    
    /* Start the Pubnub library by giving it a publish and subscribe
    
    
     keys */
    
    
     PubNub.begin(pubkey, subkey);
    
    
    }
    
    
    
    void loop() {
    
    
    /* Maintain DHCP lease. For other HW, you may need to do
    
    
     something else here, or maybe nothing at all. */
    
    
     Ethernet.maintain();
    
    
    
    /* Publish message. To write portable code, change `EthernetClient`
    
    
     to `Pubnub_BASE_CLIENT`. */
    
    
     EthernetClient *pclient = PubNub.publish(pubchannel,""message"");
    
    
     if (pclient)
    
    
     pclient->stop();
    
    
    
    /* Wait for news. */
    
    
     PubSubClient *sclient = PubNub.subscribe(subchannel);
    
    
     if (!sclient) return;//error
    
    
     char buffer[64]; size_t buflen = 0;
    
    
     while (sclient->wait_for_data()) {
    
    
     buffer[buflen++] = sclient->read();
    
    
     }
    
    
     buffer[buflen] = 0;
    
    
     sclient->stop();
    
    
    
    /* Print received message. You will want to look at it from
    
    
     * your code instead. */
    
    
     Serial.println(buffer);
    
    
     delay(10000);
    
    
    }
    
    
    
    

    库参考

    bool PubNub.begin(char *publish_key, char *subscribe_key, char *origin)

    要开始使用 PubNub,请使用 PubNub.begin()。 这应该在初始化网络硬件( 像 Ethernet.begin() ) 之后调用。

    注意,不复制字符串参数;不要覆盖或者释放存储密钥的内存 ! ( 如果要传递字符串文字,请不要担心)。注意,应该只运行发布。订阅和历史请求。

    origin参数是可选的,默认为"pubsub.pubnub.com".

    Pubnub_BASE_CLIENT *publish(char *channel, char *message, int timeout)

    将消息( 假定为格式良好的JSON ) 发送到给定信道。

    当出现错误时返回 NULL,而返回指向 Pubnub_BASE_CLIENT 类实例的指针,你可以使用它来读取发布命令的回复。 如果你不关心它马上打电话给 client->stop()。 默认的Pubnub_BASE_CLIENTEthernetClient,第二个最常用的是 WiFiClient,但是,任何一个兼容的客户端类都将执行。

    自 v2.1.0,如果Pubnub响应HTTP状态代码表示失败,这将不会返回 NULL。 如果你愿意,还可以返回其他错误,如DNS故障,网络故障,你应检查HTTP状态代码类,如:

    
    if (PubNub.get_last_http_status_code_class()!= PubNub::http_scc_success) {
    
    
     Serial.print("Got HTTP status code error from PubNub, class:");
    
    
     Serial.print((int)PubNub.get_last_http_status_code_class(), DEC);
    
    
    }
    
    
    
    

    超时参数是可选的,默认值为。 请参见以下有关超时的说明。

    PubSubClient *subscribe(char *channel)

    在给定通道上侦听消息。 当消息到达时,函数将阻塞并返回。 错误时返回 NULL。 返回类型是 PubSubClient,可以与 EthernetClient 完全一样,但是它还提供了额外的便利方法,使你能够等待更多的数据,并具有合理的超时时间。

    通常,你将从 loop() 函数运行这里函数,以继续侦听消息。

    如果一切正常,你将得到一个带有消息的JSON array,e.g.:

    
     ["msg1",{msg2:"x"}]
    
    
    
    

    另外,空回复 [] 也是正常的,你的代码必须能够处理。 请注意,回复特别不包括PubNub原始回复中提供的时间标记;不必担心这一点。

    超时参数是可选的,默认值为。 请参见以下有关超时的说明。

    Pubnub_BASE_CLIENT *history(char *channel, int limit, int timeout)

    接收在给定频道上发布的最后一条消息的列表。 limit参数是可选的,默认为 10.

    超时参数是可选的,默认值为 305. 请参见以下有关超时的说明。

    这不是官方支持的API,它主要是用于convinience的人们使用它

    调试日志记录

    要启用debugg日志记录到Arduino控制台,请添加

    
    #define PUBNUB_DEBUG
    
    
    
    

    #include <PubNub.h> 之前

    安装

    ,Pubnub是Arduino的一部分,你可以直接从Arduino中使用它。

    但是,有时用于它的库管理器的,需要更新新版本的Pubnub,因这里你可以能需要手动安装它。 为此,从 Github on下载一个发行版,将内容移至你的Arduino库目录( 在Linux上,缺省为: ~/sketchbook/libraries/PubNub/ ) 并重新启动你的Arduino IDE。 试试这些例子 !

    记住,如果你都通过Arduino库管理器和安装库,并且版本不匹配,Arduino IDE会发出以下警告:

    
    Invalid version found: x.y.z
    
    
    
    

    其中 x.y.z 将是手动安装的库的版本 ID。 这只是一个警告,构建和上传过程在任何方面都不会受到影响。

    支持硬件

    一般情况下,支持和测试最广泛的Arduino板和防护板。 任何具有支持 EthernetClient 兼容类的网络硬件的Arduino板都应该工作。

    Arduino生态系统具有许多平台,它们的硬件性能有显著差异。 跟他们在一起是不可能的。

    如果你找到了一些提供 EthernetClient compatbile类并且它不能与Pubnub库一起使用的pcmcia板/屏蔽,让我们知道。

    另外,如果你有一些Arduino板/屏蔽不提供 EthernetClient 兼容类,并且你想使用 Pubnub,请让我们知道。

    以太网屏蔽

    为此,你需要做的就是包含Ethernet库,并开始你的草图:

    
    #include <EthernetClient>
    
    
    #include <PubNub.h>
    
    
    
    

    EthernetClient 是默认的Pubnub_BASE_CLIENT

    当然,你还需要初始化屏蔽并执行任何维护( 如DHCP租约)。

    无线( 屏蔽) 支持

    无论你使用的是老式WiFi屏蔽还是无线局域网 WiFi,你都将使用 WiFiClient 类。 请记住,WiFi101库与它的他屏蔽/板( Arduino MKR1000,Adafruit Feather winc1500.。) 一起使用,并且 WiFiClient 是大多数Wifi硬件的客户端类名。

    因此,对于任何WiFi101兼容硬件,你都可以:

    
    #include <WiFi101.h>
    
    
    #define PubNub_BASE_CLIENT WiFiClient
    
    
    #include <PubNub.h>
    
    
    
    

    对于不使用WiFi101库但提供 WiFiClient 类( 如 ESP8266 )的hadware,你将:

    
    #include <ESP8266WiFi.h>
    
    
    #define PubNub_BASE_CLIENT WiFiClient
    
    
    #include <PubNub.h>
    
    
    
    

    当然,请记住你需要初始化WiFi硬件,连接WiFi网络,并可能做一些维护,这是硬件特定的。 但是 Pubnub SDK与这一点无关,它需要一个工作网络。 我们为一些硬件提供例子。

    ESP8266

    在前一节中,我们已经展示了如何使用 ESP8266,但在大多数版本的ESP8266支持中,我们使用了一些( 实际因素) 标准库函数。 要使用我们自己的实现,在包括之前,请先使用宏常量,如下所示:

    
    #define PUBNUB_DEFINE_STRSPN_AND_STRNCASECMP
    
    
    #include <Pubnub.h>
    
    
    
    

    注释

    • 如果你使用 #include <PubNub.h>,它将在你的代码中定义全局 PubNub 对象。 因此,你不能在项目中的两个或者多个不同文件中 #include <PubNub.h>,但只能在一个文件中。 在所有其他源文件( 如果有的话) #include <PubNubDefs.h> 中,它不定义全局 PubNub 对象。 这不会带来很大的不便,因为大多数的Arduino项目只有一个文件本身。

    • 我们不提供任何 SSL/TLS 支持,因为大多数Arduino兼容板资源不足。 但是,有些屏蔽/板具有 SSL ("安全") 客户端,你可能会成功使用它们,而不是非安全客户端( 说 WiFiClientSecure 而不是 WiFiClient )。 如何做到这一点取决于具体的硬件和库。

    • 我们在每个请求之前解析源服务器IP地址。 这意味着一些慢速通讯的缓慢,但我们更希望光通量和运行草图( 天,月) 更加理想。

    • 在空闲的情况下,用户可以在代码中使用( a ),而不是使用预先配置好的缓冲器来处理。

    • 如果连接出现问题,也许你已经在 Bug 版本中遇到了一个关于DNS代码的版本。 尝试使用IP地址作为源和/或者升级你的Arduino包。

    • 可选超时参数允许你指定超时时间,在这里超时期间,订阅方调用将被重试。 注意,这个超时只适用于读取响应,而不是连接或者发送数据;使用网络库的重传参数来调整这里响应。 作为一个经验规则,超过 30秒的超时可以能仍然会阻塞碎片网络。

    • 局域网中提供了 dubious implementation,如果你在复位之前总是see连接,那么你通常会看到一条失败的TCP连接,在重新设置之后,你会在路的某个地方发现一个失败的请求。

    • 一般来说,不同的屏蔽板和arduino兼容板可能存在许多问题。 一个常见的问题是固件版本。 请查看你的盾牌和电路板上的可用信息以进行故障排除。


    API  BASE  Arduino  Pubnub  
    相关文章