当前位置: 首页 > article >正文

GeekPad智慧屏编程控制(三)

前面讲了智慧屏开关通过ubuntu下面的homeassistant和笔记本电脑上的C#程序来进行控制。都可以控制智慧屏开关,但细心的用户已经发现了,我们的初心是在手机上控制开关,电脑现在回家都不一定开机,你在电脑上开发的程序只是实现了能的问题,还是没有实现手机控制。好吧,下面我们就来探索下手机控制智慧屏。

经过几天的尝试,写了一个简单的apk程序,可以开,关三个开关。界面如下:

首先,用的还是VS2022,先创建一个.net maui程序。

重新定义一下界面Main Page.xaml:

<Grid RowDefinitions="*, *, Auto, Auto, Auto, Auto, Auto, Auto"
  ColumnDefinitions="*, *"
  Padding="40">

    <Label
        Text="GeekPad开关控制器(通过MQTT)"
        x:Name="Label1"
        Style="{StaticResource Headline}"
        SemanticProperties.HeadingLevel="Level1"
        Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />

    <Image
        Source="geekpad.png"
        HeightRequest="185"
        Aspect="AspectFit"
        SemanticProperties.Description="dot net bot in a race car number eight" 
        Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
     />
    <Button
        x:Name="Switch1OnBtn"
        Text="开_1" 
        SemanticProperties.Hint="打开开关1"
        Clicked="OnSwitch1OnClicked"
        HorizontalOptions="Fill" 
        Grid.Row="2" Grid.Column="0"/>
    <Button
        x:Name="Switch1OffBtn"
        Text="关_1" 
        SemanticProperties.Hint="关闭开关1"
        Clicked="OnSwitch1OffClicked"
        HorizontalOptions="Fill" 
        Grid.Row="2" Grid.Column="1"/>
    <Button
        x:Name="Switch2OnBtn"
        Text="开_2" 
        SemanticProperties.Hint="打开开关2"
        Clicked="OnSwitch2OnClicked"
        HorizontalOptions="Fill" 
        Grid.Row="3" Grid.Column="0"/>
    <Button
        x:Name="Switch2OffBtn"
        Text="关_2" 
        SemanticProperties.Hint="关闭开关2"
        Clicked="OnSwitch2OffClicked"
        HorizontalOptions="Fill" 
        Grid.Row="3" Grid.Column="1"/>
    <Button
        x:Name="Switch3OnBtn"
        Text="开_3" 
        SemanticProperties.Hint="打开开关3"
        Clicked="OnSwitch3OnClicked"
        HorizontalOptions="Fill" 
        Grid.Row="4" Grid.Column="0"/>
    <Button
        x:Name="Switch3OffBtn"
        Text="关_3" 
        SemanticProperties.Hint="关闭开关3"
        Clicked="OnSwitch3OffClicked"
        HorizontalOptions="Fill" 
        Grid.Row="4" Grid.Column="1"/>
</Grid>

修改MainPage.xaml.cs代码:

先启动服务器,再初始化一个客户端:

 MqttClient client;
 public MainPage()
 {
     InitializeComponent();
     Start_Mqttserver();
     Label1.Text = "MQTT Server is Ready.";
     client = new MqttClient
     {
         Log = XTrace.Log,
         Server = "tcp://127.0.0.1:1883",
         ClientId = Guid.NewGuid() + "",
     };
 }

 public void Start_Mqttserver()
 {
     var services = ObjectContainer.Current;
     services.AddSingleton<ILog>(XTrace.Log);
     services.AddTransient<IMqttHandler, MqttHandler>();
     services.AddSingleton<MqttExchange, MqttExchange>();

     var server = new MqttServer
     {
         Port = 1883,
         ServiceProvider = services.BuildServiceProvider(),

         Log = XTrace.Log,
         SessionLog = XTrace.Log,
     };
     
     server.Start();
    
 }

然后,定义按钮事件:

private void OnSwitch1OnClicked(object sender, EventArgs e)
{
    Switch1On();
}

private void OnSwitch1OffClicked(object sender, EventArgs e)
{
    Switch1Off();
}

public async Task Switch1On()
{

    await client.ConnectAsync().ConfigureAwait(false);
    await client.PublishAsync("homeassistant/ECDA3B62A4CC/1/set", "ON").ConfigureAwait(false);
}

public async Task Switch1Off()
{

    await client.ConnectAsync().ConfigureAwait(false);
    await client.PublishAsync("homeassistant/ECDA3B62A4CC/1/set", "OFF").ConfigureAwait(false);
}

private void OnSwitch2OnClicked(object sender, EventArgs e)
{
    Switch2On();
}

private void OnSwitch2OffClicked(object sender, EventArgs e)
{
    Switch2Off();
}

public async Task Switch2On()
{

    await client.ConnectAsync().ConfigureAwait(false);
    await client.PublishAsync("homeassistant/ECDA3B62A4CC/2/set", "ON").ConfigureAwait(false);
}

public async Task Switch2Off()
{

    await client.ConnectAsync().ConfigureAwait(false);
    await client.PublishAsync("homeassistant/ECDA3B62A4CC/2/set", "OFF").ConfigureAwait(false);
}

private void OnSwitch3OnClicked(object sender, EventArgs e)
{
    Switch3On();
}

private void OnSwitch3OffClicked(object sender, EventArgs e)
{
    Switch3Off();
}

public async Task Switch3On()
{

    await client.ConnectAsync().ConfigureAwait(false);
    await client.PublishAsync("homeassistant/ECDA3B62A4CC/3/set", "ON").ConfigureAwait(false);
}

public async Task Switch3Off()
{

    await client.ConnectAsync().ConfigureAwait(false);
    await client.PublishAsync("homeassistant/ECDA3B62A4CC/3/set", "OFF").ConfigureAwait(false);
}

选择安卓模拟器,生成apk文件,然后将apk拷贝到手机上进行安卓。

安卓好以后打开apk,同时到手机设置里面查看一下IPv4地址,在GeekPad智慧屏MQTT设置界面填上手机的IP地址,重启后就可以用手机控制智慧屏开关了。非常的简单,大家可以试一下。图片的话大家可以改为自己的图片,显得更有个性。下面是项目截图,供大家参考。


http://www.kler.cn/a/547882.html

相关文章:

  • 微软AutoGen高级功能——Magentic-One
  • Java八股文详细文档.3(基于黑马、ChatGPT、DeepSeek)
  • Golang GC 三色标记法
  • 【算法】【区间和】acwing算法基础 802. 区间和 【有点复杂,但思路简单】
  • Windows环境安装Kafka(集群版)
  • 记使用AScript自动化操作ios苹果手机
  • 运用python制作一个完整的股票分析系统
  • Vue 2 + Vite 项目集成 ESLint 和 Prettier
  • PbootCMS增加可允许上传文件类型,例如webp、mov等文件格式扩展
  • 认识vue-admin
  • AIGC图生视频保姆级教程
  • 为什么Pytorch中实例化模型会直接调用forward方法?
  • “新旗手”三星Galaxy S25系列,再次定义了AI手机的进化方向
  • C#学习之DataGridView控件
  • 【mysql部署】在ubuntu22.04上安装和配置mysql教程
  • 明远智睿核心板在智能家居与工业网关中的应用实践
  • cv2小练习
  • Windows server 2016 无法部署docker问题
  • 网络安全-攻击流程-网络层
  • 大型语言模型训练与优化实战指南(2025最新版)