Smart Piscina Com IoT Ionic Dweet E DragonBoard

產品資訊:

Smart Piscina Com IoT 是一款物聯網架構產品,
使用 Ionic 可以控制和監控游泳池,
Dweet 和 DragonBoard 技術。 它包括像這樣的組件
鏈接器夾層、96Boards GPIO 和 Py-Spidev。 產品
允許用戶監控治療狀態、泵狀態、
水庫狀況和水池的 pH 值。 該產品還
包括一個 Dweet 提供程序,使用戶能夠將數據發送到
Dweet.io 平台進一步分析。

產品使用說明:

要使用 Smart Piscina Com IoT 產品,請遵循這些
指示:

  1. 通過運行以下命令更新和升級軟件
    終端中的命令:
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
  2. 通過運行以下命令安裝其他組件
    在終端:
    sudo apt-get install gedit
    sudo apt-get install python-pip
    sudo apt-get install build-essential autoconf automake
    libtool-bin pkg-config python-dev

    git clone
    https://github.com/jackmitch/libsoc.git

    cd libsoc
    sudo autoreconf -i
    sudo ./configure --enable-python=2 --enableboard=
    dragonboard410c --with-board-configs

    sudo make
    sudo make install
    sudo ldconfig /usr/local/lib
    git clone
    https://github.com/96boards/96BoardsGPIO.git

    cd 96BoardsGPIO/
    sudo ./autogen.sh
    sudo ./configure
    sudo make
    sudo make install
    sudo ldconfig
    git clone https://github.com/doceme/pyspidev.git
    cd py-spidev
    sudo python setup.py install
    sudo ldconfig
  3. 編輯 libsoc.conf file 通過運行以下命令
    終點站:
    sudo gedit /usr/local/etc/libsoc.conf
    更新 file 內容如下:
    { status_tratamento: 0, ligadesliga_bomba: 0, status_bomba:0,
    status_reservatorio:0, PH_setpoint:6, PH_valor: 4 }
  4. 通過在中運行以下命令來安裝請求庫
    終點站:
    sudo pip install requests
  5. 通過導入 spidev、time、Dweet、gpio 和
    通用輸入輸出口。 運行必要的功能來控制和監視
    游泳池。 對於前ample,使用readPH函數讀取pH值
    池的價值。 使用 liga_des_bomba 函數打開/關閉
    泵。 使用 atualiza_sp 函數更新 pH 設定值
    價值。 使用 dweetPost 函數發送數據到 Dweet.io
    進一步分析的平台。

指導性內容
Smart Piscina Com IoT – Ionic、Dweet E DragonBoard
來自 rxidieh
簡介
Apresento aqui uma solução para monitoramento e tratamento de piscinas de maneira remota, que poderia ser usado tanto pelo proprietário de um imóvel, como por algum piscineiro que poderia veri car remotamente diversas piscinas as quais ele atende。 在 Qualcom 的 DragonBoard 和 96boards 的 Linker Mezanine 上使用硬件。 在 Linker Mezanine 上使用 Arrow 傳感器。 Esta não é uma implementação nal! Mas sim um desenvolvimento para mostrar como realizar a programação do Hardware,comunicação com um serviço repositório na nuvem ea criação de um app para acesso e controle do sistema。 作為 funções criadas são: -Controle do PH da Piscina -Acionamento da Bomba e monitoramento -Monitoramento do nível do reservatório de produto para tratamento
建築物聯網
一個自動化的 eo controle do tratamento da piscina são realizados pela Dragonboard,com interface do usuário via app Web。 Para que isto seja possível, é utilizada arquitetura demostrada na imagem, e consute em:
1. Os dados são lidos e processados pela Dragonboard 2. DragonBoard escreve em um repositório na Web, neste caso o Dweet.io 3. O Dweet.io disponibiliza as informações lidas para que sejam disponíveis para outras aplicações 4. Um applicativo Web 關閉 Ionic 和訪問 Dweet.io 並顯示 uma 界面
HTML 常用
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 1 頁

第 1 步:配置硬件
同樣,利用 DragonBoard 410c 實現自動化和控製本地 da piscina。 Junto com a Dragonboard foi instalada um shield da 96boards chamado Linker Mezanine, que facilita o acesso aos IOs da DragonBoard。 Este shield tb possui dois conversores A/D para leitura de dados analógicos。 Nas imagens existe con guração utilizada para conexão dos IOs deste example。
1. 考慮使用 PHmetro que forneça uma saída proportional de 0 a 5V para que seja compatível com a entrada do A/D。 Caso seja utilizado um com sinal maior, será necessário um divisor resistivo para compatibilizar o sinal com a entrada
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 2 頁

2. No examplo, ao invés de um PHmetro foi utilizado um potênciometro para simulação do sinal 3. Para simular o acionamento da bomba foi utilizado um led, que em um projeto real poderia ser um
acoplador ótico acionando um TRIAC or relé 4. O 傳感器旋轉模擬 com 傳感器 de 扭矩。 Em uma aplicação real poderia ser
um sensor no eixo da bomba ou um contado auxiliar do contator que aciona a bomba。 Neste caso, em caso de defeito da bomba ou queda do disjuntor, seria possível veri car que a bomba foi acionada e não está girando 5. O sensor para nível do reservatório é um do tipo “tilt” que deverá ser instalado em uma bóia 6 . Por m, a doseagem de produto é feita por uma eletroválvula acionada por um relé
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 3 頁

Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 4 頁

Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 5 頁

第 2 步:準備 DragonBoard
廣場展示和圖書館安裝 p/ 96boards
DragonBoard 已安裝在 Linux chamada Linaro 上,它已在應用程序中執行,並已在 96boards para interface 和 Linker Mezanine 上安裝並實現了安裝。 Uma vez que estamos trabalhando em Linux, podemos acessar o Terminal para realizar os comandos de atualização e instalação de bibliotecas: Os seguintes comandos realizam a atualização da placa:
sudo apt-get 更新 sudo apt-get 升級 sudo apt-get dist-upgrade
Para trabalhar com o Python, também 實現了安裝文本編輯器和解釋器
sudo apt-get 安裝 gedit sudo apt-get 安裝 python-pip
Na sequeência serão instaladas as Bibliotecas necessárias。 Os comandos devem ser apresentados na ordem a seguir e são críticos para a instalção correta:
sudo apt-get install build-essential autoconf automake libtool-bin pkg-config python-dev sudo restart
LIBSOC(訪問鏈接器夾層)
git clone https://github.com/jackmitch/libsoc.git cd libsoc sudo autoreconf -i sudo ./configure –enable-python=2 –enableboard= dragonboard410c –with-board-configs sudo make sudo make install sudo ldconfig /usr /local/lib 須藤重啟
96板:
git 克隆 https://github。 com/96boards/96BoardsGPIO.git
cd 96BoardsGPIO/
sudo ./autogen.sh sudo ./configure sudo make sudo make install sudo ldconfig
Quase no m… mas aproveitamos para instalar tb a biblioteca para acesso a parte analógica da Linker Mezanine:
git clone https://github.com/doceme/pyspidev.git cd py-spidev sudo python setup.py install sudo ldconfig sudo restart
重要的是將 LIBSOC 確定為鏈接器夾層的引用,並提供精確的引用和 IO 的引用
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 6 頁

sudo gedit /usr/local/etc/libsoc.conf
第 3 步:Criação Do Objeto No Dweet.io
Como o proprio slogan diz, o dweet.io funciona como um Twitter para IoT, onde as coisas podem enviar e receber dados pela internet de maneira facilitada Uma característica importale é que o Dweet não necessita de uma autenticação complexa para acessar os dados, o que o torna interessante para início dos testes com IoT。 Para criar o objeto no Dweet basta seguir os seguintes passos:
1. Acessar o Dweet.io e clicar em “Play” 2. Na guia POST crie um para o obejto no campo “事物” 3. 否 campo “內容”adicione os dados que serão lidos e enviados。 Os dados devem estar 沒有格式
“json” 4. Clique em “Try it out!” e observe o resultado em “Response Body” 5. Caso queira con rmar o uncionamento da “coisa”, vá até ocampo “Get Lastest Dweet”,insira o nome do
obje criado e clique em “Try it out” para veri car a resposta do Dweet。 Para esta aplicação foi criado o objeto “smart_piscina” que tem o seguinte conteúdo:
{ “status_tratamento”:0,“ligadesliga_bomba”:0,“status_bomba”:0,“status_reservatorio”:0,“PH_setpoint”:6,“PH_valor”:4 }
Nele estão todos os dados necessários para comunicação entre a DragonBoard ea aplicação Web。 重要的是,它是一個重要的對象名稱,它可以改變任何消息,也沒有任何應用程序的代碼,因此可以同時使用各種設置,從而獲得獨立的結果
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 7 頁

第 4 步:編程 Em Python

功能邏輯

Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 8 頁

O 控制 Piscina foi desenvolvido em Python 的軟件, que é uma linguagem simples e interpretada, ou seja não necessita de compiladores para obter a execução da plicicação。 作為 funções realizadas pelo software piscina_nal.py, que roda na DragonBoard são seguintes:
1. 控制 PH、監測 o valor medido na piscina e comparando com o “Setpoint” de nido pelo usuário no Web 應用程序。 A correção será feita dosando produto através do acionamento da eletroválvula。
2. O acionamento da eletroválvula é temporizado, ou seja, uma certa quantidade de produto é dosada ea lógica aguarda um determinado período para realizar uma nova dosagem
3. O controle só é realizado se a bomba da piscina estiver em funcionamento e se o nível do tanque de produto para dosagem estiver ok!
4. Quando o PH atinge um valor superior ao desejado, a dosome para automaticamente 5. Controla a bomba, ligando e desligando a mesma através do Web app, conforme solicitação do usuário 6. Monitora e informa ao usuário o nível do reservatório do produto de Dosagem 7. Informa anomalia na bomba, caso seja ligada e não rode。
前言,Dragonboard 的發展實現了與 Dweet.io 社區的共同發展
附加組件
安裝 BIblioteca REQUESTS para realizar funções de POST e GET em HTTP
sudo pip 安裝請求
Copiar o arquivo dweet.py para mesma pasta onde está a plicação smart_piscina.py

Python 的 Código 字體
下一步,我們將提供必要的圖書館、IO 和 PH 的模擬分析工具。

導入 spidev 從 dweet 導入時間 從 libsoc 導入 Dweet 從 gpio_96boards 導入 gpio 導入 GPIO

科曼多_BBA = 36

#科曼多邦巴

尼維爾生產= 13

#Chave de nivel

DOSAGEM_VVL = 115

#瓣膜劑量

BBA_LIGADA = 24 #Retorno de Bomba ligada

GPIO_CS = 18

#傳感器 PH(模擬)

引腳 = (

(GPIO_CS, 'out'),(COMANDO_BBA, 'out'),(DOSAGEM_VVL, 'out'),(NIVEL_PROD, 'in'),(BBA_LIGADA, 'in')

)

dweet = dweet()

spi = spidev.SpiDev()

spi.open(0,0)

spi.max_speed_hz=10000

spi.模式 = 0b00

spi.bits_per_word = 8def readPH(gpio):

gpio.digital_write(GPIO_CS,GPIO.HIGH)

time.sleep(0.0002)

gpio.digital_write(GPIO_CS, GPIO.LOW)

r = spi.xfer2([0x01, 0x80, 0x00])

gpio.digital_write(GPIO_CS,GPIO.HIGH)

adcout = (r[1] << 8) & 0b1100000000

adcout = adcout | (r[2] & 0xff)

adcout = (adcout * 0.014)

#converte para PH 0 a 14

返回廣告

Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 9 頁

Na segunda parte, é realizada a leitura do Dweet e os dados armazenados em variáveis globais para logicas do software:

def le_dweet():

#Le qual setpoint para tratamento

全局 ld_bomba、st_bomba、st_trat、st_res、PH_valor、PH_SP

resposta = dweet.latest_dweet(name=”smart_piscina”)

ld_bomba = resposta['with'][0]['content']['ligadesliga_bomba']

st_bomba = resposta['with'][0]['content']['status_bomba']

st_trat = resposta['with'][0]['content']['status_tratamento']

st_res = resposta['with'][0]['content']['status_reservatorio']

PH_valor = resposta['with'][0]['content']['PH_valor']

PH_SP = resposta['with'][0]['content']['PH_setpoint']

返回 ld_bomba、st_bomba、st_trat、st_res、PH_valor、PH_SP

一個 terceira parte é a função que realiza o tratamento da piscina,com a lógica para acionamento baseada no PH,nível do reservatório e bomba ligada。 注意 que as variáveis de monitoramento são as mesmas lidas pelo Dweet,desta forma conseguimos atualizar os valores na lógica para que despois sejam novamente ao serviço。
def tratamento(): global st_trat, st_res, st_bomba st_res = gpio.digital_read(NIVEL_PROD) st_bomba = gpio.digital_read(BBA_LIGADA) if (PH_valor < PH_SP) and ( st_res == 1) and ( st_bomba == 1): gpio。 digital_write(DOSAGEM_VVL, GPIO.HIGH) time.sleep(2) #tempo da dosagem do produto gpio.digital_write(DOSAGEM_VVL, GPIO.LOW) time.sleep(1) #espera entre dosensens st_trat = 1 print(“TRATAMENTO lIGADO”) 數字寫(DOSAGEM_VVL, GPIO.HIGH)否則:gpio.digital_write(DOSAGEM_VVL, GPIO.LOW) st_trat = 0 print(“TRATAMENTO DESlIGADO”) return st_trat, st_res

四分之一 e última parte é o looping de execução da lógica。 A ordem onde as subrotinas são chamadas é importante para que os dados lidos pelo Dweet sejam atualizados e depois enviados para a correta visualização no Web 應用程式.

if __name__=='__main__': with GPIO(pins) as gpio: while True:
le_dweet() tratamento() PH_valor = round(readPH(gpio), 2) 如果 ld_bomba == 1: gpio.digital_write(COMANDO_BBA, GPIO.HIGH) print(“Bomba Ligada”) else: gpio.digital_write(COMANDO_BBA, GPIO. LOW) print(“Bomba Desligada”) print(“Valor do PH = %d” % PH_valor) print(“Valor do SP PH = %d” % PH_SP) print(“”) dweet.dweet_by_name(name=”smart_piscina” , data={“ligadesliga_bomba”:ld_bomba, “status_bomba”:st_bomba, “status_tratamento”:st_trat, “status_reservatorio”:st_res, “PH_valor”:PH_valor, “PH_setpoint”:PH_SP}) time.sleep(10)

https://www.instructables.com/ORIG/FPV/I7ZO/JAMTVW5R/FPVI7ZOJAMTVW5R.py https://www.instructables.com/ORIG/FMD/BHS3/JAMTVW5V/FMDBHS3JAMTVW5V.py

下載中心

第 5 步:Desenvolvimento Do APP – Ambiente Hídrido
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 10 頁

Plataforma híbrida 離子
O applicativo para controle da piscina será desenvolvido utilizando uma plataforma híbrida, ou seja, fazemos a abstração do hardware que o app será utilizado e desenvolvemos um projeto utilizando HTML, CSS e Javascript que posteriormente pode ser convertido em um app para uma plataforma especí ca como安卓或 IOS。 在 Cordova 平台上使用 IONIC 的基礎功能,允許可視化和測試渲染應用程序 Web 瀏覽器。 Para o Desenvolvimento do app,使用語言 HTML 和 Typescript。 o IONIC também 允許使用框架 Angular para trabalhar ocs componentes como Models e Controllers。
發展環境安裝
O desenvolvimento do app será realizado em um computador pessoal, e não na placa DragonBoard。 開始安裝 node.js,需要使用 Ionic Acessar 或網站 https://nodejs.org/en/ 和 fazer o 下載 node.js 的最終版本,然後安裝 NPM 開發人員之後再安裝 node.js。 允許安裝 Ionic。 Windows 沒有提示 de comando 意識到安裝 com os seguintes comandos:
npm 安裝 g cordova ionic npm 安裝 g cordova
測試離子,然後執行命令並在安裝後恢復:
離子v
Criação da plicação no Ionic
Não, não tem uma interface grá ca bonita。 Tem que criar o app utilizando a linha de comandos。 Mas depois a facilidade de uso compensa。 Para criar uma nova aplicação, neste caso a smart_piscina, digitamos o seguinte comando:
離子啟動 smart_piscina 空白
Será criada uma nova aplicação em branco que estará salva no diretório:
C:UsuáriosNome 做 usuáriosmart_piscina
Para testar o codigo:
cd smart_piscina 離子服務
Será aberta uma tela no navegador padrão mostrando a applicação em branco
第 6 步:Desenvolvimento Do APP – Edição Da Aplicação
一個 edição da applicação em branco gerada pelo Ionic será realizada 沒有 Visual Studio Code,applicativo gratuito de programação desenvolvido pela Microsoft e que pode ser baixado 沒有網站:https://code.visualstudio.com/download Os códigos alterados são apresentados a seguir, mas também estão disponíveis para download.
介面
一個界面來自 usuário será editada no arquivo home.html。 注意問題 tags 使用 Ionic 和 contém Smart Piscina Com IoT – Ionic、Dweet E DragonBoard:第 11 頁

alguns 參數 inseridos utilizando os recursos 做框架 Angular。 Os recursos do Angular são utilizados no botão de acionamento da bomba e na entrada do valor de Setpoint do PH. Não é possível apresentar o código aqui por uma limitação do Instructables, que apaga as tags. 下載後沒有壓縮包。
流程
由於 fuções referentes a leitura e escrita de dados no Dweet e lógicas em geral para o correto funcionamento da interface estão arquivo home.ts desenvolvido em Typescript, liguagem muito semelhante ao Javascript
從'@angular/core'導入{組件}; 從 'ionic-angular' 導入 { NavController };
//É preciso importar o provider. 從'../../providers/dweet/dweet'導入{DweetProvider};
@Component({ 選擇器: 'page-home', 模板Url: 'home.html'
})
出口類主頁{
構造函數(公共 navCtrl:NavController,私有 DweetProvider:DweetProvider){}
//Declarações de Variáveis public respostaDweet: string=””; public status_tratamento: string=”danger”; 公共 st_trat = 0; public status_bomba: string=”danger”; 公共 st_bba = 0; public status_reservatorio: string=”danger”; 公共 st_res = 0; 公共場所=數組(); 公共 PH_val = 0; 公共 SP_PH = 0;
//模型做 botão de ligar bomba public bomba_model = {
檢查:錯誤,名稱:“Ligar Bomba”}
離子ViewDidLoad () { //buscando os dados no Dweet e salvando nas variáies locais this.DweetProvider.getLastestDweet(“smart_piscina”).subscribe( data=>{
常量響應=(任何數據); const objeto_retorno = JSON.parse(response._body); this.locais = objeto_retorno.with[0].content; this.bomba_model.checked = objeto_retorno.with[0].content.ligadesliga_bomba; this.st_bba = objeto_retorno.with[0].content.status_bomba; this.st_trat = objeto_retorno.with[0].content.status_tratamento; this.st_res = objeto_retorno.with[0].content.status_reservatorio; this.PH_val = objeto_retorno.with[0].content.PH_valor; this.SP_PH = objeStmo_arret tPoirsncoin.wa iCtho[m0].IcooTn-teIonnti.cP,HD_wseeettpEoinDtr;agonBoard: 第 12 頁

this.SP_PH = objeto_retorno.with[0].content.PH_setpoint; 控制台日誌(this.locais); }, 錯誤 => { console.log(error); } ) //狀態圖標 this.status_bomba = ((this.st_bba == 1) ? “secondary” : “danger”); this.status_tratamento = ((this.st_trat == 1) ? “secondary” : “danger”); this.status_reservatorio = ((this.st_res == 1) ? “secondary” : “danger”); }
//Botão Atualizar update() {
這個離子View沒有加載(); }
//Liga Desliga Bombaliga_des_bomba(){ this.dweetPost() }
atualiza_sp(){ this.dweetPost()
}
dweetPost(){ //將布爾值轉換為內部 const ld_bba = ((this.bomba_model.checked == true) ? 1 : 0);
//Envia dados para o Dweet.io const json_dweet = {“ligadesliga_bomba”: ld_bba, “status_bomba”: this.st_bba, “status_tratamento”: this.st_trat, “status_reservatorio”: this.st_res, “PH_valor”: this.PH_val , “PH_setpo int”: this.SP_PH}; this.DweetProvider.setDweet(“smart_piscina”,json_dweet).subscribe(
數據=>{ console.log(數據); }, 錯誤=> { console.log(錯誤); } ) } }
微博提供者
É necessário criar um provider para realizar comunicação HTTP com o Dweet。 Isto é feito através do Ionic com o seguinte comando no prompt de comando:
離子生成提供者 dweet
立即發送消息或發送消息。發送消息的命令已發送給 GET 和 POST 消息。 O código necessário é exibido a seguir:
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 13 頁

從'@angular/http'導入{Http}; 從'@angular/core'導入{Injectable}; 導入 'rxjs/add/operator/map'; /*
為 DweetProvider 提供程序生成的類。 有關提供程序和 Angular DI 的更多信息,請參閱 https://angular.io/guide/dependency-injection。 */ @Injectable() 導出類 DweetProvider { 私有基礎Url =“https://dweet.io:443/”構造函數(public http:Http){
console.log('Hello DweetProvider Provider'); } //Método responsável por buscar as informações no Dweet. getLastestDweet(東西:字符串){
常量 url_get = this.baseUrl + “get/latest/dweet/for/” + 事物; 控制台日誌(url_得到); 返回這個.http.get(url_得到); } //Método resposnsável por modificar os dados no Dweet。 setDweet(thing, body) { 返回 this.http.post(this.baseUrl + “dweet/for/”+ 東西,身體); } }
對於 Dweet Provider 的 HTTP 功能,需要使用 app.module.ts 來實現:
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 14 頁

從'@angular/platform-b​​rowser'導入{BrowserModule}; 從 '@angular/core' 導入 { ErrorHandler, NgModule }; import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular'; 從'@ionic-native/splash-screen'導入{SplashScreen}; 從'@ionic-native/status-bar'導入{StatusBar}; 從'@angular/http'導入{HttpModule}; 從'./app.component'導入{MyApp}; 從'../pages/home/home'導入{主頁}; 從'../providers/dweet/dweet'導入{DweetProvider}; @NgModule({
聲明:[ MyApp, HomePage
],進口:[
BrowserModule, IonicModule.forRoot(MyApp), //Importar o modulo HTTP usado pelo Dweet。 HttpModule ], bootstrap: [IonicApp], entryComponents: [ MyApp, HomePage ], providers: [ StatusBar, SplashScreen, {provide: ErrorHandler, useClass: IonicErrorHandler}, DweetProvider ] }) 導出類 AppModule {}
烏法!
Salve tudo e teste a applicação através do comando:
離子發球
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 15 頁

Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 16 頁

Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 17 頁

Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 18 頁

https://www.instructables.com/ORIG/FUH/W6SK/JAMTWKY9/FUHW6SKJAMTWKY9.zip

下載

第 7 步:Colocando Tudo Para Funcionar!!
1.Iniciando o Dweet:沒有站點 Dweet.io,喊叫對象符合描述,無需第 3 步
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 19 頁

2.在 DragonBoard 上啟動一個應用程序:在沒有 Linaro 的終端上,獲取應用程序上的意大利面 smart_home.py 和命令:
須藤蟒蛇smarthome.py
3.Iniciando a applicação no Ionic: Abra o prompt de comando, acesse a pasta onde está o applicativo criado no Ionic e digite o comando 廣告
離子發球
https://youtu.be/O27f93xE0bk https://youtu.be/HaSeRf3wkSI https://youtu.be/vx16cLQKOeU
步驟一:
Smart Piscina Com IoT – Ionic,Dweet E DragonBoard:第 20 頁

文件/資源

instructables Smart Piscina Com IoT Ionic Dweet E DragonBoard [pdf] 指示
Smart Piscina Com IoT Ionic Dweet E DragonBoard、Smart Piscina、Com IoT Ionic Dweet E DragonBoard、Dweet E DragonBoard

參考

發表評論

您的電子郵件地址不會被公開。 必填欄位已標記 *