控制 GPIO 的 Android 套接字

Posted

技术标签:

【中文标题】控制 GPIO 的 Android 套接字【英文标题】:Android socket that controls GPIO 【发布时间】:2017-01-27 18:38:49 【问题描述】:

我想构建一个基于套接字的 android 应用程序,该应用程序连接到树莓派,并具有一个(开关)或两个控制 GPIO 状态的按钮。我只成功地根据 IP 地址和端口在我的应用程序和树莓派之间建立了一个简单的按钮连接。它控制 GPIO,但几秒钟后它会无缘无故地自动将状态从高低变为低。 我是否必须从 android 应用程序或从树莓派的服务器/客户端 java 文件控制 GPIO 状态?

请帮忙...

【问题讨论】:

【参考方案1】:

对于python管脚控件,首先安装python库: sudo apt-get install python-dev python-rpi.gpio

以下 python 脚本将打开引脚 18(BCM 编号),然后在 5 秒后将其关闭:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, GPIO.HIGH)
time.sleep(5)
GPIO.output(18, GPIO.LOW)

树莓派上的引脚编号有两种符号(BOARD 和 BCM),请查看this 链接以获取两者的地图。由于这两个符号,它很容易被误认为不工作,例如 GPIO23 = pin 16

对于应用程序架构,我建议MQTT,它是轻量级的,非常适合物联网架构。 android 和 python 以及 HiveMq 和 Mosquitto 等几个代理都有库。我已经编写了一个演示,它可以在 android 和树莓派 here(python 部分)和 here(android 部分)之间进行通信,它可以帮助您入门。

【讨论】:

【参考方案2】:

据我了解,您询问的是应用架构。我认为在 RaspberryPi 中,您应该实现一种套接字侦听器,它具有一组预定义的命令,例如切换 GPIO 引脚状态、获取 GPIO 引脚状态等。从 Android 端,您将连接到服务器,通过发送适当的命令检索状态(如果您需要显示当前 GPIO 状态),并在控件上发送预定义的命令单击以告诉服务器端执行某些操作。像这样。这是我个人的看法。

【讨论】:

感谢您的回答...有趣的部分是我尝试了几种方法来运行控制 gpio 但没有成功的 python 脚本,但设法直接从 android 应用程序控制gpio 但出现上述错误!也许我必须为我想要控制的每个 gpio 和 gpio 状态制作一个不同的 py 文件?【参考方案3】:

我正在做类似的事情,但使用 TI cc3200 over wifi p2p。我没有使用 Raspberry Pi 的经验,所以请记住这一点。如果您的 GPIO 正在更改状态而没有从您的应用程序发送任何其他命令,我会查看 Raspberry 的问题。一些想法,您的 android 可能会设置一个断点,您可以在其中向 Raspberry 发送信号,看看是否发生了您不希望发生的任何事情。使用 Raspberry 可能会在 pi 接收命令的例程中设置断点。 (我说你对用于 pi 的 IDE 的了解为零。)一般来说,断点和单步执行是你找出发生了什么的地方。我认为您可以研究微处理器中的下拉电阻和稳定性。自从我处理这种事情以来已经很长时间了,所以我不确定,那么这可能不适用于 Pi。只是一个想法。最后,也许有人比我聪明得多。

【讨论】:

树莓派工作正常,因为我还有一个 http 应用程序可以连接并正常工作。

以上是关于控制 GPIO 的 Android 套接字的主要内容,如果未能解决你的问题,请参考以下文章

我如何判断我是不是仍在监听 Android 中的套接字

Android中的IPC进程通信方式第五篇

Android GPIO 控制方案

[android 8.0中的android套接字连接

Android 上的异步套接字实现

Android - 服务器套接字