请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2094|回复: 1
收起左侧

WiFi单片机向智能手机推送消息-Ameba

[复制链接]

27

主题

20

回帖

101

积分

初级会员

积分
101
发表于 2020-10-12 11:11:57 | 显示全部楼层 |阅读模式
现在市面上的WiFi物联网单片机越来越多,但是真正可以实现有价值的功能的实例比较少,这里给大家介绍使用瑞昱的RTL8722双频WiFi+蓝牙的单片机来做“单片机向智能手机推送消息”,这篇文章适合向海外推广的产品,因为这里使用的是谷歌的Firebase云信息推送服务:


使用Firebase推送讯息服务
[size=1.125em]材料准备
  • Ameba x 1
  • Android Studio
  • 提供Google Play Service的智慧型手机 x 1

范例说明
在智慧型手机普及的年代,在手机里常不定时收到特定App的提示讯息,大家对这样的经验一定不陌生,在本范例里将教学如何使用Google Firebase从Ameba Client端将讯息推送至手机。
首先我们使用的Firebase Cloud Messaging(FCM)是一种跨平台的讯息传递方案,可让您免费可靠地传递消息。
使用FCM,您可以通知客户端应用程序(App),能同步更新电子邮件或其他数据。您可以发送讯息来推动用户的参与。对于即时讯息传递内容,一个讯息最多可传输4KB的payload到客户端应用程序。
FCM实现包括两个用于发送和接收的主要部份:
1. 受信任的环境,例如Cloud Functions for Firebase或用于构建,定位和发送讯息的应用服务器。
2. 接收消息的iOS,Android或Web(JavaScript)客户端应用程序。
您可以通过Admin SDKHTTP&XMPP API 发送消息。要使用功能强大的内置定位和分析功能测试或发送营销或参与消息,您还可以使用Notifications composer
了解到这里,我们得知Ameba只要实现http client功能,即可以推送讯息至特定的APP里。
首先我们要先架设开发Android App的环境,请大家先至Android官网下载Android Studio
接着我们可以使用Firebase提供的Android 范例,下载Firebase Quickstart Samples
开启Android Studio并点击Import project,选择Firebase Quickstart Samples 里的messaging project,这里因为我们用不到其他的功能,所以选择messaging project即可。
Android Studio第一次开启messaging project会需要安装SDK及Google repository,可以参考以下网页进行update
等到编译app所需的要件安装完成,即能开启messaging project,Android Studio本身自带Firebase注册功能
如上图,打开工具列点击Tools->选择Firebase
右窗格即开启Firebase Assisant,接着看到Cloud Messaging,选择Set up Firebase Cloud Messaging开启注册程序
点击 Connect to Firebase
接着会带出网页,并且点击左边的Firebase并登入Gmail帐号,登录成功会进入Firebase首页
我们先留着首页,等等还需要进入Firebase Console,接着回到Android Studio
我们可以看到当网页登入成功,Android studio也带出登入资讯对话框,点击connect to Firebase
即可右窗格看到Dependencies set up correctly,并且在左窗格看到多了一个google-service.json的档案,代表此app已注册成功
此时能将手机接上电脑(按下Shift+F10)或按下工具列的Runs App,在这里请大家注意,Firebase需要手机提供Google play service(GPS)的服务,在有一些手机,预设没有安装Google Play是无法使用Firebase的范例。
如上图,messaging app在手机上安装并执行成功,此时按一下LOG TOKEN
会出现一段Token ID,此为推送讯息所需的Access Token,代表某一特定手机里所安装拥有FCM服务APP的ID,此ID是唯一的,并且在App移除再安装时会被重新分配一个Access Token,这也代表讯息能推送至某一特定手机,FCM服务还可以推送讯息至某一个NEWS(Topic),这部份可以参考Firebase topic-messaging教学:
因此我们需要把这段Access Token保存起来,如下图回到Android Studio,在底下Logcat的地方log level选取Debug,当按下App上的LOG TOKEN按钮时,Logcat就会印出这一段Access Token ID,我们把Log讯息中InstanceID Token:后面的字码先保起来。
接着我们要回到刚刚登入Firebase时所带出的网页
右上角点进前往控制台
此时在页面中已看到Android Studio在刚刚的操作中,为我们建好了messaging project
点击进入messaging project,如上图我们进入设定页面
选择 Set up
进入设定页面选择Cloud Messaging页,我们会看到Legacy server key,这段Server key也需要在程式里使用,我们先将之保存起来,接下来开始编辑程式码。
我们打开范例 “File” -> “Examples” -> “AmebaWiFi” -> “Firebase.ino”
如上图,在反白处定义了ACCESS_TOKEN及SERVER_KEY,也就是我们刚从APP保存下来的ACCESS token ID及Firebase console页面里保存的Server Key,我们将这两组ID填上去,编译并上传至Ameba之后按下Reset按钮,此时打开终端机
连上AP之后开始连线FCM Server
出现Connect to Server successful连线FCM成功,开始推送讯息,过程中会收到HTTP/1.1 200 OK代表讯息推送成功,此时打开手机萤幕,App收到来自Ameba推送的讯息

程式码说明
Firebase.ino
此范例使用HTTP协议来推送讯息,使用者可以到Firebase开发网站学习payload格式
程式中主要的payload格式如下,使用者可自由更改讯息的Title及Body,Body代表讯息的内容
char const* payload = "{" \    "\"to\": \"" ACCESS_TOKEN "\"," \    "\"notification\": {" \    "\"body\": \"Hello World!\"," \    "\"title\" : \"From Realtek Ameba\" " \    "} }" ;
程式的setup()里
if (client.connect(server, 80)) {    Serial.println("connected to server");    // Make a HTTP request:    sprintf(message,"%s%s%s%s%s%d%s%s%s","POST /fcm/send HTTP/1.1\nContent-Type: application/json\nAuthorization: key=",SERVER_KEY,"\nHost: ",HOST_NAME,"\nContent-Length: ",strlen(payload),"\n\n",payload,"\n");    printf("\nRequest:\n%s \n",message);    client.println(message);    client.println();  }
sprintf的部份将payload包进了HTTP POST的content里,并在连上FCM Server之后将此message 推送出去
loop()里
while (client.available()) {    char c = client.read();    Serial.write(c);  }
等待Server的回应,并将其回应内容印出来





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106398
QQ
发表于 2020-10-13 01:15:56 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-19 07:47 , Processed in 0.286353 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表