Hi there

👋 Welcome to my personal blog!

IoT系列 - 基于MQTT实现RGB灯远程控制(之三·Android APP篇)

本文是《基于MQTT实现RGB灯远程控制》的第三篇,开发基于mqtt的Android应用,实现RGB灯的远程控制。 1. 开发环境准备 要开发安卓应用,我们需要安装最新的android studio开发环境,android studio可以从官网下载,中文官网可以畅通无阻的下载,下载链接见文末的引用链接列表。 ...

November 30, 2025

基于Vscode搭建Puya PY32F00x系列单片机开发环境

初衷 最近在某宝发现了一个性价比很高的单片机普冉PY32F003,可以替代ST和GD,芯片只需要0.5元左右,32KB flash,4K RAM,主频也有24MHz,性价比确实高。PY32F003对标STM32F0,也是基于Arm Cortex M0+架构,可以兼容STM32的API,对于了解STM32的同学来说,学习成本几乎为0。 ...

November 29, 2025

IoT系列 - 基于MQTT实现RGB灯远程控制(之二·ESP32下位机篇)

1. 准备材料 本文是《基于MQTT实现RGB灯远程控制》的第二篇,基于ESP32-S3开发板实现RGB灯的下位机。 2. 开发环境搭建 本项目使用的是vscode + Platformio作为开发环境,所以在开始开发前需要安装vscode,并安装platformio插件。 ...

November 28, 2025

IoT系列 - 基于MQTT实现RGB灯远程控制(之一·理论篇)

1. 初衷 最近在给一所大专3年级的同学上安卓开发课程,同学们以前所学的课程以嵌入式开发为主,对于软件开发可能不太熟悉,而且同学们也即将开始毕业设计,出于毕业设计启发的目的,本系列文章将带着大家从0开始搭建属于一个手机APP控制RGB灯的项目。希望本系列文章可以给同学们一些点子与启示。 ...

November 19, 2025

User Online Tracking System Design

123

January 26, 2024

How to Fix the "Server May Not Support Tls Protocol Version" in gradle project

Problem I have a flutter project managed by a gradle, when I try to run the project in android phone, I got the following errors: Execution failed for task ':location:compileDebugLibraryResources'. > A failure occurred while executing com.android.build.gradle.tasks.CompileLibraryResourcesTask$CompileLibraryResourcesAction > Could not isolate value com.android.build.gradle.tasks.CompileLibraryResourcesTask$CompileLibraryResourcesParams_Decorated@6644f036 of type CompileLibraryResourcesTask.CompileLibraryResourcesParams > Could not resolve all files for configuration ':location:detachedConfiguration2'. > Failed to transform aapt2-7.3.0-8691043-osx.jar (com.android.tools.build:aapt2:7.3.0-8691043) to match attributes {artifactType=_internal-android-aapt2-binary, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Could not download aapt2-7.3.0-8691043-osx.jar (com.android.tools.build:aapt2:7.3.0-8691043) > Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/7.3.0-8691043/aapt2-7.3.0-8691043-osx.jar'. > Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/7.3.0-8691043/aapt2-7.3.0-8691043-osx.jar'. > The server may not support the client's requested TLS protocol versions: (TLSv1.2, TLSv1.3). You may need to configure the client to allow other protocols to be used. See: https://docs.gradle.org/7.5/userguide/build_environment.html#gradle_system_properties > Remote host terminated the handshake Solution After investigate in the official gradle doc, I found the solution below: ...

January 25, 2024

解决Kubernetes Pod无法访问外部网络

问题与排查 目前业务使用K8S中部署java的微服务,但在使用过程中,发现某个kubernetes的pod无法访问api.weixin.qq.com,尝试通过nslookup, nc来测试pod是否可以连通服务 ...

January 23, 2024

Create K8s high availability cluster With HAProxy

Preparation To setup a k8s cluster, I will prepare 4 machines with the following network setting: hostname ip role gm-mini 192.168.31.199 HAProxy gm-red 192.168.31.200 k8s master gm-green 192.168.31.201 k8s master gm-blue 192.168.31.202 k8s worker gm-orange 192.168.31.203 k8s worker 1. create master on gm-red sudo kubeadm init \ --apiserver-advertise-address=192.168.31.200 \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.29.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///run/containerd/containerd.sock \ --control-plane-endpoint=192.168.31.199:6443 \ --upload-certs 2. Apply CNI network plugin kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml 3. Join as control-panel nodes (gm-green) sudo kubeadm join 192.168.31.199:6443 \ --token 7yszg3.su99ir6t8m9o8ttr \ --discovery-token-ca-cert-hash sha256:xxxx \ --control-plane \ --certificate-key yyyyy 4. Join as worker node (gm-blue, gm-orange) sudo kubeadm join 192.168.31.199:6443 \ --token aaa.bbb \ --discovery-token-ca-cert-hash sha256:xxxx

January 19, 2024

Forgot Google Play Keystore Password

How to use a new keystore when forgetting the old keystore password. References: https://support.google.com/googleplay/android-developer/answer/9842756?visit_id=638409667460085362-3335308105&rd=1#create https://support.google.com/googleplay/android-developer/answer/9842756?sjid=8714361814298672927-NC#create https://support.google.com/googleplay/android-developer/answer/9842756?visit_id=638409667460085362-3335308105&rd=1#reset

January 16, 2024

Effective Java Note

Item 6, Avoid creating unnecessary objects.

November 27, 2023