K Apps
K Apps
  • 36
  • 145 522
How to Write End to End Tests in Android (Basics Guide, UI Test) - Android Studio Tutorial
In this video we will build a simple example app with some navigation and button click functionality for which we then implement end to end tests. This video will contain the basics of implementing this kind of tests for Android using Android Studio.
Final source code:
github.com/MatthiasKerat/EndToEndTestYT
00:00 Introduction
01:17 Building the example app
10:57 Write end to end tests
มุมมอง: 2 133

วีดีโอ

Android Build a Clean Architecture MVVM Auth Module with Industry Level Code - Android Studio
มุมมอง 7Kปีที่แล้ว
In this video we will build an MVVM Clean Architecture auth module with industry level code which you can then use or modify for your own needs. We will also take care of performance optimization in compose and write unit tests for our business logic. This video is a perfect tutorial if you wanna become an advanced Android developer. Get the initial source code here: github.com/MatthiasKerat/Au...
Advanced Error Handling in Android (Custom Exceptions, Custom Errors) - Android Studio Tutorial
มุมมอง 2.5Kปีที่แล้ว
In this video I will show you a powerful advanced approach how to handle errors properly. This will keep your code very clean and gives you the full flexibility about your error handling in a very scalable way.
Android 3 Tips to Keep Your ViewModel Clean and Structured - Android Studio Tutorial | Clean Code
มุมมอง 1.3Kปีที่แล้ว
In this short video I will show you 3 programming techniques to keep your ViewModel clean. Often ViewModels become very big especially if you provide a lot of functionality. This tips help you to don't mess things up and have a clean ViewModel when developing Android applications.
Build a Clean Architecture Wallet App with Unit Tests - Android Studio Tutorial
มุมมอง 2.1Kปีที่แล้ว
In this video we will build a Clean Architecture wallet application with a lot of Unit Tests. We will validate the business logic which is mainly in the use cases (Clean Architecture) with different test cases to make sure that our logic works properly. Get the source code here: github.com/MatthiasKerat/WalletYT 00:00 Introduction & dependencies 03:00 Business logic and unit tests 28:35 UI and ...
Implement and Visualize a Recursive Sort Algorithm (Advanced Programming) - Android Studio Tutorial
มุมมอง 1.1Kปีที่แล้ว
In this video we will implement the recursive Merge Sort algorithm and visualize each step on the UI so that we can always see whats currently going on. This is a great opportunity to learn how more complex algorithms work and makes also a lot of fun :-). There are hundreds of algorithms which can be visualized like this so feel free to apply this logic to other algorithms. Get the final source...
Android Build an MVVM Clean Architecture CSV File Creating and Sharing App - Android Studio Tutorial
มุมมอง 1.5Kปีที่แล้ว
In this video we will build an MVVM Clean Architecture file export application where first a CSV file gets created and can then be shared to other applications. A lot of applications actually require to share some kind of data to other apps like email, WhatsApp and so on so I think this video can be really helpful when it comes to implementing this kind of feature. You will learn how to structu...
Android Implementing and Visualizing a Sorting Algorithm with Animations - Android Studio Tutorial
มุมมอง 2Kปีที่แล้ว
In this video we will implement the Bubblesort algorithm and visualizing each step on the UI so that we can always see whats currently going on. This is a great opportunity to learn how algorithms work and makes also a lot of fun :-). There are hundreds of algorithms which can be visualized like this so feel free to apply this logic to other algorithms. Get the final source code here: github.co...
Android Build Powerful Flow Chains in Kotlin (flowOn, collect, map, ..) - Android Studio Tutorial
มุมมอง 1.1Kปีที่แล้ว
In this video we will see how we can build powerful flow chains in Kotlin. We will apply flows on a real world example to show you an example how they can be used to make a really responsive UI. We will also see how different operators like map, onEach, or filter work. Get the final source code here: github.com/MatthiasKerat/FlowsYT
Android Build a Hexagonal Progress Indicator with Jetpack Compose Canvas - Android Studio Tutorial
มุมมอง 1.4K2 ปีที่แล้ว
In this video we will build a clickable Calendar with Jetpack Compose and Canvas and also apply animation logic on click events. This video is a great opportunity to get started with Canvas in Jetpack Compose. Get the final source code here: github.com/MatthiasKerat/HexagonProgressIndicatorYT
Android Build an MVVM Clean Architecture Order Application - Android Studio Tutorial
มุมมอง 5K2 ปีที่แล้ว
In this video we will build an MVVM Clean Architecture order application. There will be a lot of data and state logic so you will learn how to manage this the right way and it will help you to get confident with more complex app projects. Get the initial source code here: github.com/MatthiasKerat/OrderApplikationYT/tree/main Get the final source code here: github.com/MatthiasKerat/OrderApplikat...
Build a Clickable Calendar in Jetpack Compose with Canvas and Animations - Android Studio Tutorial
มุมมอง 7K2 ปีที่แล้ว
In this video we will build a clickable Calendar with Jetpack Compose and Canvas and also apply animation logic on click events. This video is a great opportunity to get started with Canvas in Jetpack Compose. Get the final source code here: github.com/MatthiasKerat/CalendarYT
Android Getting Started with Jetpack Compose and Canvas Building a Battery - Android Studio Tutorial
มุมมอง 9112 ปีที่แล้ว
In this video we will build a simple battery Composable with Jetpack Compose and Canvas. This video is a great opportunity to get started with Canvas in Jetpack Compose. Get the final source code here: github.com/MatthiasKerat/BatteryYT
State Management in Jetpack Compose Best Practices - Android Studio Tutorial
มุมมอง 2.3K2 ปีที่แล้ว
State Management in Jetpack Compose is one of the most important things in order to create clean Composables, to separate responsibilities and to always display the right state to the user. In this video we will have a look at the best practices to manage your state. E.g. how to create state, where to create it or when you actually should use ViewModels / state holder classes. 00:00 How to prop...
State Management in Jetpack Compose (Why State Hoisting is so Important) - Android Studio Tutorial
มุมมอง 2.2K2 ปีที่แล้ว
In this video I will show you one of the most important core principles of Jetpack Compose: State Hoisting. We will go over some examples to see the actual problems if you don't apply the State Hoisting principles and how you properly fix those issues.
Build a Beautiful 3D Bar Chart in Jetpack Compose using Canvas - Android Studio Tutorial
มุมมอง 2.5K2 ปีที่แล้ว
Build a Beautiful 3D Bar Chart in Jetpack Compose using Canvas - Android Studio Tutorial
Android Getting Started with Jetpack Compose and Canvas Building a Live Clock - Android Studio
มุมมอง 3.1K2 ปีที่แล้ว
Android Getting Started with Jetpack Compose and Canvas Building a Live Clock - Android Studio
Build Your own Pie Chart with Jetpack Compose in Android - Android Studio Tutorial | Canvas
มุมมอง 4.8K2 ปีที่แล้ว
Build Your own Pie Chart with Jetpack Compose in Android - Android Studio Tutorial | Canvas
Android Build a Draggable Picker / Slider in Jetpack Compose for Great UX - Android Studio | Canvas
มุมมอง 2.3K2 ปีที่แล้ว
Android Build a Draggable Picker / Slider in Jetpack Compose for Great UX - Android Studio | Canvas
Android Object Management Like a Pro (Dto, Domain, UI) - Clean Architecture | MVVM | Android Studio
มุมมอง 2.2K2 ปีที่แล้ว
Android Object Management Like a Pro (Dto, Domain, UI) - Clean Architecture | MVVM | Android Studio
SwiftUI Navigation Techniques (NavigationLink, Custom Navigation, Sheets) - Navigation Can be Easy
มุมมอง 1.3K2 ปีที่แล้ว
SwiftUI Navigation Techniques (NavigationLink, Custom Navigation, Sheets) - Navigation Can be Easy
Android Custom Dialogs in Jetpack Compose - Android Studio Tutorial
มุมมอง 9K2 ปีที่แล้ว
Android Custom Dialogs in Jetpack Compose - Android Studio Tutorial
5 Ways to Increase the Performance in Jetpack Compose (with Code examples) - Android Studio Tutorial
มุมมอง 7052 ปีที่แล้ว
5 Ways to Increase the Performance in Jetpack Compose (with Code examples) - Android Studio Tutorial
Make Dependency Injection Easy in Swift (No Need for Frameworks) - Xcode Tutorial for iOS, macOS, ..
มุมมอง 1202 ปีที่แล้ว
Make Dependency Injection Easy in Swift (No Need for Frameworks) - Xcode Tutorial for iOS, macOS, ..
derivedStateOf, produceState, snapshotFlow - Jetpack Compose Side Effects + Effect Handlers Guide
มุมมอง 7612 ปีที่แล้ว
derivedStateOf, produceState, snapshotFlow - Jetpack Compose Side Effects Effect Handlers Guide
rememberUpdatedState, rememberCoroutineScope - Jetpack Compose Side Effects + Effect Handlers Guide
มุมมอง 6762 ปีที่แล้ว
rememberUpdatedState, rememberCoroutineScope - Jetpack Compose Side Effects Effect Handlers Guide
DisposableEffect - Jetpack Compose Side Effect + Effect Handlers Guide
มุมมอง 8482 ปีที่แล้ว
DisposableEffect - Jetpack Compose Side Effect Effect Handlers Guide
LaunchedEffect, SideEffect & Compose Lifecycle - Jetpack Compose Side Effect + Effect Handlers Guide
มุมมอง 2.9K2 ปีที่แล้ว
LaunchedEffect, SideEffect & Compose Lifecycle - Jetpack Compose Side Effect Effect Handlers Guide
Easiest Way to Implement a BroadcastReceiver in Android Jetpack Compose - Android Studio Tutorial
มุมมอง 1.7K2 ปีที่แล้ว
Easiest Way to Implement a BroadcastReceiver in Android Jetpack Compose - Android Studio Tutorial
Android Circular Progress Indicator + Circular Slider in Jetpack Compose Part 2 - Android Studio
มุมมอง 3.5K2 ปีที่แล้ว
Android Circular Progress Indicator Circular Slider in Jetpack Compose Part 2 - Android Studio

ความคิดเห็น

  • @nasimnajand9697
    @nasimnajand9697 26 วันที่ผ่านมา

    your channel content is wonderful. wish you will make new ones ❤

  • @mithilmehta1501
    @mithilmehta1501 หลายเดือนก่อน

    Viewmodel gets usecase in the constructor param and usecase gets repository in the constructor param.

  • @samyaksingh7445
    @samyaksingh7445 2 หลายเดือนก่อน

    Amazing work !

  • @Serosim
    @Serosim 3 หลายเดือนก่อน

    Bro, ur content is perfect. I have watched a lot of kotlin tutorials, but yours are just the best

  • @nehzz7433
    @nehzz7433 3 หลายเดือนก่อน

    Good video! It will help if I can know your reason for not using the recommended window size class breakpoints in the Android documentation

  • @atabashir5335
    @atabashir5335 3 หลายเดือนก่อน

    Thanks for the wonderful tutorial. Great explanation. Could you please tell me how can I read RSSI value of the connected tag?

  • @hadiabbasi8681
    @hadiabbasi8681 4 หลายเดือนก่อน

    that was very good. thanks ❤

  • @KashyapChandraPratap
    @KashyapChandraPratap 4 หลายเดือนก่อน

    keep doing man...that's really good <3

  • @gamingpanther2583
    @gamingpanther2583 4 หลายเดือนก่อน

    This video provides so much clarity and I can say that now I can make a modular application. However, I still confused with uni-directional data flow between each layer. Please make a video about it.

  • @Hyzen-os9ed
    @Hyzen-os9ed 4 หลายเดือนก่อน

    XML was much much better in terms of centralizing dimens

  • @OutOfNameIdeas2
    @OutOfNameIdeas2 4 หลายเดือนก่อน

    this is already outdated lol. most the libraries are depreciated too.

  • @justplay6503
    @justplay6503 5 หลายเดือนก่อน

    Thank you very much for your work I'm studying it right know and I'm enjoying it, you really teach me something!😀

  • @biochemicalsystems9922
    @biochemicalsystems9922 5 หลายเดือนก่อน

    Absolutely perfect video. I learned a lot!

  • @TacticalTrainingCompany
    @TacticalTrainingCompany 5 หลายเดือนก่อน

    Hi I receive this error when I try to RUN the application: java.lang.IllegalAccessError: class org.jetbrains.kotlin.kapt3.base.KaptContext (in unnamed module @0x70db1019) cannot access class com.sun.tools.javac.util.Context (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.util to unnamed module @0x70db1019 at org.jetbrains.kotlin.kapt3.base.KaptContext.<init>(KaptContext.kt:28) at org.jetbrains.kotlin.kapt3.KaptContextForStubGeneration.<init>(KaptContextForStubGeneration.kt:40) at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.contextForStubGeneration(Kapt3Extension.kt:287) at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:171) at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:102) at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$invokeExtensionsOnAnalysisComplete(TopDownAnalyzerFacadeForJVM.kt:112) at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:122) at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:86) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:252) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:243) at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:113) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:243) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:90) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:56) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:92) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:412) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:112) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:358) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:300) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:119) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:170) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:81) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:607) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:96) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1658) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:840)

  • @PowerTechSystem-qk1st
    @PowerTechSystem-qk1st 6 หลายเดือนก่อน

    Why would a repository invoke a usecase?

  • @ahmadab9666
    @ahmadab9666 6 หลายเดือนก่อน

    Hi, i just have one question, do you just thinking about all those calculations or you did some search and asked some persons about how you can make all this calculations stuff, because i strugger to do something like this or even easer

  • @alirezab4253
    @alirezab4253 6 หลายเดือนก่อน

    thanx a lot bro , that help too much 🤍

  • @murtazabaranwala8955
    @murtazabaranwala8955 6 หลายเดือนก่อน

    h1, body1 now not working 😅

  • @kadircan1862
    @kadircan1862 6 หลายเดือนก่อน

    thanks for this great tutorial

  • @mahdiporkar236
    @mahdiporkar236 7 หลายเดือนก่อน

    I really like the way you teach clean architecture. I would say it is the best content I have seen so far please continue making great videos! One thing you can improve is that when you are writing code add some empty lines and the end of the file so the code would not be in the bottom of screen and covered by subtitles!

  • @mahdiporkar236
    @mahdiporkar236 7 หลายเดือนก่อน

    Man, this is great the best tutorial I have found for this principle! even the clean arch tutorials where violating this rule!

  • @kevinmartinez2215
    @kevinmartinez2215 7 หลายเดือนก่อน

    Hi there, do you have an example to read the characteristic ?

  • @auraliann
    @auraliann 8 หลายเดือนก่อน

    hi bro! i just found your channel and i can say that the things what you do are literally awesome.

  • @SharifJohnGhafforov
    @SharifJohnGhafforov 8 หลายเดือนก่อน

    Hello Sir ! I liked your work. Thanks ! I have a question: Do we need any kind of data from Device with BLE to be able to connect and share data with it ?

  • @MElsayed7
    @MElsayed7 8 หลายเดือนก่อน

    In Clean Architecture, it's not typical to send use cases to the repository constructor. The repository's responsibility is to provide an abstraction over data access, not to interact directly with business logic or use cases.

  • @alexkokos5363
    @alexkokos5363 8 หลายเดือนก่อน

    Great video, thank you for your job! Can you help me please? May i connect Tuya BLE THB2 sensor using this app, the fact is that when ble sensors are scanned, it does not see them, although these sensors are ble devices :(

  • @levimendes958
    @levimendes958 8 หลายเดือนก่อน

    very good

  • @michelgirard6055
    @michelgirard6055 8 หลายเดือนก่อน

    Very good and useful tutorial. Thanks a lot

  • @christosbazios52
    @christosbazios52 9 หลายเดือนก่อน

    Hi Matze, your videos are outstanding and explained. Do you plan any whole Jetpack Compose course (free or paid), on TH-cam or Udemy? Do you suggest any books on Jetpack Compose? Thanks in advance for your content!!!

  • @christosbazios52
    @christosbazios52 9 หลายเดือนก่อน

    Excellent video!

  • @psanavps
    @psanavps 9 หลายเดือนก่อน

    Simply amazing....the best part is that everything is a Wrapper, 1 drag helper class of all type of draggable Views. Perfect! P.S :- Please try to sound a little more awake 😄

  • @Babs_i
    @Babs_i 9 หลายเดือนก่อน

    SOS! First step- first Problem! compose_version and classpath are red, Gradle sync failed. Is there anything I should have done before? How did you all do this?

  • @christosbazios52
    @christosbazios52 9 หลายเดือนก่อน

    Excellent!

  • @daveshackshack
    @daveshackshack 9 หลายเดือนก่อน

    Just starting to use responsive views and SwiftUI, great start for , Thank you!

  • @derekdevs
    @derekdevs 9 หลายเดือนก่อน

    This is fantastic. Thank you!!

  • @swish6143
    @swish6143 9 หลายเดือนก่อน

    I have been using canvas and then drawRect. Can you explain how the drawConterxt.cavas.nativeCanvas.apply and Paint().apply works? This looks mor advanced. Thanks a lot for sharing, the canvas thing is difficult to figure out. Grüße aus Frankfurt.

  • @john.mattock
    @john.mattock 9 หลายเดือนก่อน

    How would you dynamically change/update the text of a button during runtime? Thanks!

    • @derekdevs
      @derekdevs 9 หลายเดือนก่อน

      Use view model to manage button text as state and update in an onClick (or any other event which should update button text)

    • @john.mattock
      @john.mattock 9 หลายเดือนก่อน

      Thanks!@@derekdevs

  • @JozsefNyulas
    @JozsefNyulas 9 หลายเดือนก่อน

    Thanks for this. Really useful used it for my state exam. Also explanations are very useful for people who want learn new stuff.

  • @Prashanth-wg1yh
    @Prashanth-wg1yh 10 หลายเดือนก่อน

    Stumbled across this channel as i was searching for a video to understand the Disposable Effects . Ended up watching all the videos in this playlist. Time really well spent. Thank you very much for the effort put in to create such videos

  • @Prashanth-wg1yh
    @Prashanth-wg1yh 10 หลายเดือนก่อน

    Such clear explanation. thank you very much

  • @АльфредАхметгалеев
    @АльфредАхметгалеев 10 หลายเดือนก่อน

    Hello! Why did you close the project?

  • @ianlipa9826
    @ianlipa9826 10 หลายเดือนก่อน

    Detailed and easy to understand explanation. I already subscribed as my thanks. 👌

  • @Lingchao2596
    @Lingchao2596 10 หลายเดือนก่อน

    Great video. Thank you.

  • @danlegg-n9v
    @danlegg-n9v 10 หลายเดือนก่อน

    do you know what bluetooth chip the sensor uses? I'm trying to do a similar project with a HM-10 chip! Thanks

  • @ngomdecadetkamdaou3464
    @ngomdecadetkamdaou3464 10 หลายเดือนก่อน

    Good explanation, thanks. So basically it means that a LaunchedEffect used with Unit as a key is similar to a SideEffect, except that a LaunchedEffect gives a suspend block, am I right?

  • @qzero
    @qzero 10 หลายเดือนก่อน

    Hi Could you continue this tutorial? I have a suggestion, could you show how to add a circle to indicate the current position?

  • @farouktouil5036
    @farouktouil5036 10 หลายเดือนก่อน

    Thank you for this tutorial, by the way i have a question , if for example I want to add a deleverer to the list of Deliverer selection , do I have to create another AddDelivererViewModel or use the existing OrderChooseDelivererViewModel ? thank you.

  • @henrik908
    @henrik908 10 หลายเดือนก่อน

    Thanks mannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

  • @nathann4291
    @nathann4291 10 หลายเดือนก่อน

    Thank you so much!

  • @MyHobbies-qh8pg
    @MyHobbies-qh8pg 11 หลายเดือนก่อน

    hi Sir, thank you for the best tutorial, is it possible to create another tutorial where we actually write to Arduino or Esp32 to control a simple LED to turn ON and Turn Off?