前面已经简单看过一个全新的Android Flutter应用程序的创建、编译以及安装包的结构。现在可以来看看Flutter程序是如何在Android上运行的。分析的应用程序是之前使用flutter create创建的Demo。功能就是点击界面上的【+】,然后界面上的数字递增显示。 我们只打开其中的Android项目。 flutter项目在最外层的lib/main.dart文件中。

 

 

一 Android项目结构

 

整个Demo的Android项目很简单,只有一个MainActivity页面和一个GeneratedPluginRegistrant文件。

看一下Activity中的代码, 这也太简单了,仅仅是调用了一下 GeneratedPluginRegistrant的方法, 没有任何UI相关的代码。

继续阅读

一 创建Flutter应用

 

如果使用Android Studio 或者Visual Studio Code 可以从IDE中创建一个新Flutter应用程序,以AS为例,这里可以创建四种类型的项目。

当然也可以使用Flutter命令从命令行创建,通过help命令可以看有那些参数, 一般按下面命令就可以创建一个新的flutter项目

flutter create --help

➜flutter create  --org com.cc.flutter.hello flutter_hello
Creating project flutter_hello...

Running "flutter packages get" in flutter_hello...                 10.9s
Wrote 67 files.

All done!

Run "flutter doctor" for information about installing additional components.

In order to run your application, type:

  cd flutter_hello flutter run

Your application code is in flutter_hello/lib/main.dart.

继续阅读

这一篇主要介绍一下Flutter的SDK环境搭建,网上关于环境搭建的文章很多,但是介绍基本都没有介绍SDK里有些什么。本文以Mac上安装为例,因为主要涉及到SDK内部,所以和其他平台应该是一致的。

官方的安装文档: https://flutterchina.club/get-started/install/

 

 

一 获取Flutter SDK

 

官网下载页: https://flutter.dev/docs/development/tools/sdk/archive

GitHub下载页: https://github.com/flutter/flutter/releases

 

在国内Flutter官网可能无法访问,一般大家都会去github上下载。下面是github上的release包,最新版是v1.3.13

从GitHub下载有个问题是大家容易忽略的,就是版本的channel。如果能打开官网的网页,我们可以发现Flutter SDK 有Stable、Beat、Dev、Master 四个渠道。 其中Stable版本到目前为止只release了两个版本,通过对比发现,GitHub上release的是Dev版本。

继续阅读

Flutter应该是目前前端最火热的一个词了,移动端的发展从Web到H5、到Native APP、到Hybrid、到React Native 然后到现在的Flutter。所有一起都是为了解决移动端需求的快速迭代、快速更新、减少三端的重复开发量。去年年初就开始大概了解了一下Flutter,前年也是看了一段RN,只是没有很深入,因为工作上也没用的上。所以这次打算边学边记录学习一门新的技术,并不建议装好环境马上动手写代码,而是应该先去了解整个系统的结构、原理、设计,甚至是选择性的阅读源码。这更有助于写好代码。 毕竟读别人的代码比自己写要难得多。

 

后续文章都如无特殊说明,都是基于以下版本

Flutter 1.2.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 8661d8aecd (6 weeks ago) • 2019-02-14 19:19:53 -0800
Engine • revision 3757390fa4
Tools • Dart 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)

 

 

一 Flutter是什么

 

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
优点
  • 快速开发:毫秒级的热重载,修改后,您的应用界面会立即更新。使用丰富的、完全可定制的widget在几分钟内构建原生界面。
  • 富有表现力和灵活的UI:快速发布聚焦于原生体验的功能。分层的架构允许您完全自定义,从而实现难以置信的快速渲染和富有表现力、灵活的设计。
  • 原生性能:Flutter包含了许多核心的widget,如滚动、导航、图标和字体等,这些都可以在iOS和Android上达到原生应用一样的性能。

以上都是官网的介绍,简单说Flutter是一个跨平台的UI框架,可以实现写一份代码同时在IOS和Android平台上执行。并且有着比H5和RN更好,基本接近原生应用的性能。Flutter并不是用来取代Android和IOS的原生开发,它必须以原生页面作为Host来执行。 它不是一个新的平台,只是一个UI框架,因为可以跨平台,所以可以减少两端UI的开发量。 但是并不能替代原生开发,因为很多功能还是需要调用原生系统的接口。

继续阅读

一 DHT22传感器

 

目前树莓派可以使用的温度传感器还是比较多,主要有DHT11、DHT22和DS18B20。其中DS18B20只能测量温度,而DHT11精度和范围都比HDT22要差,量程湿度20-90%RH, 温度0~50℃, 所以我选择了DHT22,价格上DHT115,6块钱。而DHT22大概在15-18块左右。 温湿度传感器在空调、除湿机、汽车等很多地方都有使用。

DHT22样子是这样。上面写着ASAIR AM2302,表示使用的奥松的AM2302型温湿度传感器。每次使用一个设备之前都必须要了解这个设备的信息,奥松官网有详细的AM2303手册参考。

 

继续阅读

之前在美国的VPS主机上使用SeaFile搭建过一个网盘,但是用的很少。 在腾讯买了主机之后,正好利用COS一起可以在搭建一个网盘。在网上看了下,NextCloud用的人比较多,所以准备试一下。 官网: https://nextcloud.com/

 

 

一 NextCloud 安装

 

官网上有好几种安装方式,使用Docker或者是Snap安装是最方便的,直接集成好了需要的环境。我还是采用手动安装的方式,这样整个过程是可控的。

 

 

1.环境准备

 

我的主机是Ubuntu16.04的系统,使用NextCloud 需要HTTP服务器、PHP和数据库。 这些我之前已经装好了,如果没有安装请先安装。下面是我服务器上安装的版本,如果版本不同,可能会有一些差别,特别是php版本。

  • nginx:1.10.3
  • php: v7.0.30
  • MySQL:5.7.23

所以在安装nextcloud之前,请保证nginx、php7和MySQL能正常使用。

 

安装PHP插件

nextcloud需要安装一些php插件才能正常工作,下面是我安装时需要用到的。 其中mysql是我之前安装wordpress已经安装了。后续安装过程中如果还提示缺少插件,可以在安装。可以参考:Installation on Linux

sudo apt install php7.0-curl php7.0-gd php7.0-zip php7.0-mbstring php7.0-mysql

 

创建MySQL数据库和用户

nextcloud需要使用到数据库,所以我们可以创建一个数据库和用户。命令行登入到MySQL之后,执行下面命令来创建数据库和用户。

mysql> create database nextcloud; 

mysql> create user 'nextcloud'@'%' identified by '你用户的密码';

mysql> grant all privileges on nextcloud.* to 'nextcloud'@'%';

mysql> flush privileges;

继续阅读

前面成功的使用RPi.GPIO库,设置高低电平完成了LED灯和蜂鸣器的状态控制,因为RPi.GPIO没有提供对TM1637的支持,所以借助了已有的库完成了四位数码管的显示。从tm1637.py源码看,他实际也是使用了RPi.GPIO库。 虽然PRi.GPIO库只提供了简单的设置GPIO高低电平的功能,但是我们前面说过这是所有通信的基础,你可以自己通过设置高低电平来实现所有的协议通信。这么一说和我们只用0和1来编程有点象了。只要有0和1,你可以编写任何代码。而这里有高低电平你可以控制任何设备。所以这一篇打算简单分析一下TM1637的源码。

 

一 TM1637

 

先从高层次的TM1637开始分析。在控制LED和蜂鸣器时,我们使用一个高低电平就能控制设备,因为对于这样的设备来说,他们的通信协议非常简单。 高电平发光、低电平不发光。相比而言,TM1637数码的协议就负责很多。要想知道一个设备的通信协议就需要有设备的资料。

我们在网上买到的TM1637一般是下面这个样子。这是由CATALEX公司出的4-Digit Display。而一般称他为TM1637是指它背后的拿颗20针的控制芯片。整个数码管子是由TM1637芯片(U1)、4位数码管(U2)和4针接口(J1)组成的。

继续阅读

前面已经学习了一些树莓派系统和GPIO的基本知识了,现在可以开始动手做一些简单的东西了。因为一些外设的连接会涉及到一些电路的知识,如果操作不当可能会损坏外设或者是树莓派。所以在哦动手之前最好还是补充点电路相关的知识。我是花了点时间又把初中电路稍微复习了下,然后又乱七八糟看了点模拟电路、数字电路。所以最终应该也没有太多用处。

网上对于树莓派第一个项目基本就是接LED,然后控制。所以我第一个程序也使用LED,只不过想做的稍微复杂一点。 结合数码管和蜂鸣器来模拟十字路口的交通信号灯。使用的材料主要有:

  • 3个不同颜色的LED灯
  • TM1637四位数码管
  • 有源蜂鸣器
  • 若干100欧以上的电阻
  • 面包板和面包板连接线
  • 若干杜邦线

 

继续阅读

树莓派基本环境搭建好之后就可以在上面安装各种应用了。这样对树莓派来说就是一台小型电脑,基本电脑、服务器能做的事情她也都能做。只不过内存比较小。1G的内存多跑2个服务内存就吃不消了。最近VPS也是,apache和tomcat一跑,差不多吃了500M内存,也不知道能怎么优化了。而且家里光猫无法破解成桥接模式,外网穿透还没有做,所以就没装什么服务。 所以还是玩一玩树莓派相比电脑特有的东西吧。

 

一 GPIO

 

GPIO全称是General Purpose Input Output (通用输入/输出)。广义上来说它并不是类似USB、DVI、HDMI这样一种特定协议的接口,而是通用接口的总称。对于了解单片机的人来说应该非常熟悉,而对于我们这些纯软件开发,没有接触过单片机的人来说,并不是很好弄清楚到底是个什么东西。 下面是维基百科的定义:

general-purpose input/output (GPIO) is an uncommitted digital signal pin on an integrated circuit or electronic circuit board whose behavior—including whether it acts an input or output—is controllable by the user at run time.

从上面总结出几点:

    1. 数字针脚(可以是集成电路上的针脚,比如CPU或位处理器的针脚;也可以是开发板比如树莓派、Arduino上提供的GIPO接口)
    2. 可以用来输入或输出
    3. 运行时可控

继续阅读

一 安装开发必备软件

 

 

build-essential

 

最基本的,系统已经装好了,里面主要包括gcc, libc, make

pi@raspberrypi-cc:~ $ sudo apt install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version (12.3).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

 

gcc/g++

 

build-essential系统已经装好了,那么gcc自然也好了

pi@raspberrypi-cc:~/source $ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 6.3.0-18+rpi1+deb9u1' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armhf/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armhf --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armhf --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1+deb9u1)

好像从Android 7.0开始的source编译默认编译器已经使用clang,不过目前也没编译源码的需求,关键这机器得编译一天吧。。。哈哈,先不装了

继续阅读