【教程】手机远程连接另一台手机的termux进行拍照

这篇具有很好参考价值的文章主要介绍了【教程】手机远程连接另一台手机的termux进行拍照。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

被控端手机(termux)

控制端手机


    主要通过MQTT实现通信。图片的上传和显示使用了服务器

    对于没有服务器的同学,可以进入官网领取免费1个月的轻量云服务器:云产品免费试用;需要选购的进:轻量应用服务器专场;不清楚怎么操作的可以看教程:腾讯云产品免费试用教程

实现效果:

【教程】手机远程连接另一台手机的termux进行拍照,干货,python,开发语言,termux,Android,安卓

        当然这只是一个示例,只要能实现手机间的通信,那就可以借助termux-api实现非常多的功能!

被控端手机(termux)

pip换源:

apt update -y
apt upgrade -y
apt install python -y
apt install python-dev -y
apt install clang -y
apt install libffi-dev -y
apt install openssl-dev -y
apt install libxml2-dev libxslt-dev -y
mkdir ~/.pip
touch ~/.pip/pip.conf
nano ~/.pip/pip.conf

写入内容:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/

termux安装mqtt等库

pip install paho-mqtt requests
apt install imagemagick catimg -y

termux中的Python代码为:

# coding:utf-8
import paho.mqtt.client as pahomqtt
import os
import base64
import requests
import time
import threading
import socket
from queue import Queue

def get_host_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    ip = ''
    try:
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

class MQTT:
    def __init__(self):
        self.CLIENTID = 'redmi8'
        self.MQTTHOST = "xfxuezhang.cn"
        self.MQTTPORT = 1883
        self.USERNAME = 'lh'
        self.PASSWORD = "hualala"
        self.HEARTBEAT = 60
        self.topic_subscribe = f'/mqtt/{self.CLIENTID}'
        self.topic_publish = f'/mqtt/{self.CLIENTID}/send/msg'
        self.topic_publish_image = f'/mqtt/{self.CLIENTID}/send/image'
        self.heart_beat_publish = f'/mqtt/{self.CLIENTID}/heartbeat'
        self.client = pahomqtt.Client()
        self.CloudAllowRun = 1
        self.msg_buffer = Queue()
 
    def get_msg(self):
        if self.msg_buffer.empty():
            return None
        return self.msg_buffer.get()
    
    # MQTT连接回调
    def on_connect(self, client, userdata, flags, rc):
        if rc == 0:
            print("Connected")
            client.subscribe(self.topic_subscribe)
 
    # MQTT接收回调
    def on_message(self, client, userdata, message):
        result = 'ok'
        msg = str(message.payload.decode("utf-8")).strip()
        print("Received message: " + msg)
        self.msg_buffer.put(msg)
        
  
    def remove_image(self, path="a.png"):
        url = 'http://xfxuezhang.cn/web/picture/remove_file.php?name='+path
        if os.path.exists(path):
            os.remove(path)
        return requests.get(url).text
 
    def upload_image(self, path="a.png"):
        result = None
        try:
            url = 'http://xfxuezhang.cn/web/picture/upload_file.php'
            os.popen(f'convert {path} -resize 200x150 {path}')
            filename = path.split('/')[-1]
            files = {"file": (filename, open(path, "rb"), "image/png")}
            response = requests.post(url, files=files)
            print(response.text)
            result = response.json()['data']
        except Exception as e:
            print(e)
        return result
 
 
    def convert_image(self, path="a.png"):
        os.popen(f'convert {path} -resize 200x150 {path}')
        # 从文件中读取图片并将其转换为二进制数据
        with open(path, "rb") as f:
            image_bytes = f.read()
        # 将二进制数据编码为base64字符串
        image_base64 = base64.b64encode(image_bytes).decode("utf-8")
        return image_base64
 
 
    def heart_beat(self):
        msg = 'ip: ' + get_host_ip()
        print(f'>> 心跳信息: {msg}')
        try:
            self.client.publish(topic=self.heart_beat_publish, payload=msg, qos=0)
        except Exception as e:
            print(e)
            
    def mqtt(self):
        self.client.on_connect = self.on_connect
        self.client.on_message = self.on_message
        self.client.username_pw_set(self.USERNAME, self.PASSWORD)
        try:
            self.client.connect(self.MQTTHOST, self.MQTTPORT, self.HEARTBEAT)
            # self.client.loop_forever() # 阻塞方式
            self.client.loop_start()     # 线程方式
        except:
            pass
 
    def publish(self, topic, msg, qos=0):
        self.client.publish(topic=topic, payload=msg, qos=qos)
 
 
if __name__ == '__main__':
    mqtt = MQTT()
    while True:
        try:
            mqtt.mqtt()
            break
        except Exception as e:
            print('异常,5s后重试=>' + str(e))
            time.sleep(5)
    print('>> MQTT 启动成功')
    
    while True:
        msg = mqtt.get_msg()
        if not msg:
            # 没有消息要处理时,定时上报心跳
            mqtt.heart_beat()
            time.sleep(1)
            continue
        # 收到消息
        if msg.startswith('cmd:img'):
            _, cmd, path = msg.split(' ')
            print('>> 图片路径:', path)
            if cmd == 'upload':
                img = mqtt.upload_image(path)
                if img:
                    mqtt.publish(topic=mqtt.topic_publish_image, msg=img)
                    result = 'upload ok'
                else:
                    result = 'upload fail'
            elif cmd == 'remove':
                mqtt.remove_image(path)
                result = 'remove ok'
        else:
            # 执行本地cmd命令,并将结果保存到变量result中
            result = os.popen(msg).read().strip() or 'complete'
        print(">> 指令结果: " + result)
        mqtt.publish(topic=mqtt.topic_publish, msg=result)

        

运行记录:

【教程】手机远程连接另一台手机的termux进行拍照,干货,python,开发语言,termux,Android,安卓

控制端手机

        另一台控制端的手机上安装“MQTT Dashboard”,并添加一些组件,其中的主题根据上面的代码来填。实现效果:

【教程】手机远程连接另一台手机的termux进行拍照,干货,python,开发语言,termux,Android,安卓

MQTT Dashboard 中导入上面所示的界面配置

{"tiles":[{"broker_id":1,"color":-8604862,"compact_layout":false,"confirm":false,"customize_output":false,"enable_pub":false,"icon":"device_vec_home_account","last_update":1688190731101,"name":"执行结果","notificationMessage":"","notificationTitle":"","notifyOnChange":false,"output_template":"","paintBackground":true,"payloadIsJson":false,"payload_path":"","position":0,"qos":0,"retain":false,"show_as_shortcut":false,"tile_details":{},"tile_type":3,"timestamp_path":"","topic":"/mqtt/redmi8/send/msg","topic_pub":"","tunables":{"text_postfix":"","text_prefix":""},"uid":4,"value":""},{"broker_id":1,"color":-16023485,"compact_layout":true,"confirm":true,"customize_output":false,"enable_pub":true,"icon":"mdes_ico_camera_alt","last_update":0,"name":"前置拍照","notificationMessage":"","notificationTitle":"","notifyOnChange":false,"output_template":"","paintBackground":true,"payloadIsJson":false,"payload_path":"","position":1,"qos":0,"retain":false,"show_as_shortcut":false,"tile_details":{},"tile_type":2,"timestamp_path":"","topic":"","topic_pub":"/mqtt/redmi8","tunables":{"click_payload":"termux-camera-photo -c 1 a.png"},"uid":1,"value":""},{"broker_id":1,"color":-538816,"compact_layout":true,"confirm":true,"customize_output":false,"enable_pub":true,"icon":"mdes_ico_collections","last_update":0,"name":"获取照片","notificationMessage":"","notificationTitle":"","notifyOnChange":false,"output_template":"","paintBackground":true,"payloadIsJson":false,"payload_path":"","position":2,"qos":0,"retain":false,"show_as_shortcut":false,"tile_details":{},"tile_type":2,"timestamp_path":"","topic":"","topic_pub":"/mqtt/redmi8","tunables":{"click_payload":"cmd:img upload a.png"},"uid":2,"value":""},{"broker_id":1,"color":-2818048,"compact_layout":true,"confirm":true,"customize_output":false,"enable_pub":true,"icon":"mdes_ico_delete_forever","last_update":0,"name":"删除照片","notificationMessage":"","notificationTitle":"","notifyOnChange":false,"output_template":"","paintBackground":true,"payloadIsJson":false,"payload_path":"","position":3,"qos":0,"retain":false,"show_as_shortcut":false,"tile_details":{},"tile_type":2,"timestamp_path":"","topic":"","topic_pub":"/mqtt/redmi8","tunables":{"click_payload":"cmd:img remove a.png"},"uid":3,"value":""},{"broker_id":1,"color":-16540699,"compact_layout":true,"confirm":true,"customize_output":false,"enable_pub":true,"icon":"device_vec_human_greeting","last_update":0,"name":"自定义指令","notificationMessage":"","notificationTitle":"","notifyOnChange":false,"output_template":"","paintBackground":true,"payloadIsJson":false,"payload_path":"","position":4,"qos":0,"retain":false,"show_as_shortcut":false,"tile_details":{},"tile_type":2,"timestamp_path":"","topic":"","topic_pub":"/mqtt/redmi8","tunables":{"click_payload":""},"uid":5,"value":""},{"broker_id":1,"color":-5792882,"compact_layout":false,"confirm":false,"customize_output":false,"enable_pub":true,"icon":"mdes_ico_filter","last_update":1688190953875,"name":"照片显示","notificationMessage":"","notificationTitle":"","notifyOnChange":false,"output_template":"","paintBackground":true,"payloadIsJson":false,"payload_path":"","position":100,"qos":0,"retain":false,"show_as_shortcut":false,"tile_details":{},"tile_type":9,"timestamp_path":"","topic":"/mqtt/redmi8/send/image","topic_pub":"","tunables":{"auto_refresh_image":"true","refresh_interval":"10"},"uid":6,"value":""}],"groups":[],"groupsTileJoin":[]}

【教程】手机远程连接另一台手机的termux进行拍照,干货,python,开发语言,termux,Android,安卓

【教程】手机远程连接另一台手机的termux进行拍照,干货,python,开发语言,termux,Android,安卓文章来源地址https://www.toymoban.com/news/detail-521733.html

到了这里,关于【教程】手机远程连接另一台手机的termux进行拍照的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在安卓手机Termux上安装MariaDB(MySQL)并实现远程连接数据库

    Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身Linux。 MariaDB是MySQL关系数据库管理系统的一个复刻,由社区开发,有商业支持,旨在继续保持在 GNU GPL 下开源。开发这个分支的原因之一是:甲骨文公司

    2024年02月04日
    浏览(34)
  • 怎样远程控制另一台电脑

    有多种方法可以远程控制另一台计算机,您选择的方法将取决于您的具体需要和涉及的操作系统。以下是您可以遵循的一些一般步骤: 在目标计算机上启用远程访问:在 Windows 上,您可以通过转到“控制面板”“系统和安全”“系统”“远程设置”并选择允许远程连接的选项

    2023年04月20日
    浏览(79)
  • IP远程实施访问另一台电脑

    相信大部分实施工程师都会有远程实施客户的经历,常规远程方法是使用远程工具(如向日葵、帮我吧等),下面用对方IP地址来进行远程,更方便有效。 首先,打开查看对方的远程服务是否开启,如未开启,打开 “此电脑” 右键 “属性” ,如图,我们启用远程桌面: 打

    2024年02月13日
    浏览(36)
  • 用一台电脑连接另一台电脑的虚拟机

    一台装有Xshell的Windows系统电脑 A(欢姐的惠普) ,另一台装有虚拟机的Windows系统电脑B(笔者的拯救者),用 A 连接 B 方法如下: 1, A ,B 两台机器保证在同一个WiFi的条件下 (硬性条件) 2,打开B中的虚拟机(用管理员方式打开),并将B中的虚拟机设置桥接模式 : 画红色

    2024年02月09日
    浏览(43)
  • 同一网络(局域网)下远程控制另一台电脑

    Windows 7/8/10 一台控制的电脑 、 一台要被控制的电脑,同属一个网络下。 一、 要被控制的电脑设置: 1.必须设置用户密码。 给电脑设置用户登录密码就不多说了,自己设置一个靠谱的密码。上图   2.设置”允许远程访问“ 桌面-我的电脑-右击-属性-高级系统设置   在远程 里

    2024年02月06日
    浏览(88)
  • mac ssh连接另一台window虚拟机vm

    编辑(E)    虚拟网络编辑器(N)...    NAT设置(S)... 控制面板    系统和安全    Windows 防火墙 高级设置 入站规则 新建规则... tips windows查看端口命令: netstat -ano | findstr 5555 Mac使用    

    2024年02月13日
    浏览(39)
  • 不用翻箱倒柜找数据线,电脑投屏到另一台电脑,无线、远程投屏方法!

    对于职场人士来说,电脑投屏电脑绝对是必不可少的工具,稳定高效的投屏开会是职场人渴望的技能,总比天天抱着笔记本走来走去,还要去翻箱倒柜的找数据线要强。如何实现电脑间的稳定投屏,AirDroid Cast提供了一个好思路。 教你一个便捷方法让电脑无线投屏到电脑上,

    2024年02月04日
    浏览(58)
  • Python——UDP Socket实现视频互传,远程调用另一台电脑摄像头(cv2)

    目录 一台电脑当服务器多线程提供摄像头服务,支持多台电脑调用 一、效果展示 和舍友联机,多台电脑效果 二、带注释的代码 1.服务端  2.客户端 用一个电脑当服务端,舍友当客户端连接 监控寝室外面的情况 客户端需要使用命令行调用   还支持保存传输来的视频,记录日

    2024年02月12日
    浏览(37)
  • FRP 进行内网穿透,在一台客户端上配置多台服务器连接,winsw 配置多个 windows 自启动服务,Windows 远程桌面连接时目标客户端断开 WIFI连接解决办法

    本篇博客建立在已经使用 FRP 实现通过一台服务器范围一台客户端的基础上,不会从头开始对如何配置 FRP 实现内网穿透进行介绍。有需要这方面的同学可以参考下面这篇文章:【计算机网络相关】内网穿透介绍以及使用FRP实现内网穿透Windows远程桌面_frp内网穿透-CSDN博客 本篇

    2024年02月01日
    浏览(47)
  • SSH连接安卓手机Termux —— Android手机

    随着移动智能设备的普及,各种各样的使用需求也被开发出来,从最早的移动听音乐、看图片(MP3时代),到之后的移动视频需求(MP4时代)到现在的移动流媒体需求(智能手机看视频)。但当我们习惯这些需求后,忽然发现自己不知不觉间成了待割的韭菜(3台设备就要加钱

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包