IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Swift 3.0 OpenSource sur Linux, Essai réussi sur Raspberry
Options
Jaypee
posté 26 Jun 2016, 10:45
Message #1


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



J'ai dû me préparer une image de Ubuntu 16.04 Mate pour booter le Rpi2 avec une version de Linux capable de supporter Swift 3.0

- J'ai essayé d'utiliser la recette macOS à base de commande dd documentée
- On identifie le nom des devices en insérant la carte mémoire SD puis avec la commande diskutil list, puis on démonte le device: diskutil unmountdisj /dev/disk4
- Télécharger l'image et la décompresser pour obtenir un .img
- dd if=chemin/vers/image.img of=/dev/disk4 bs=2m
Désolé, mais ça ne marche pas. La copie des 8Go prend bien 15 min, mais l'image ne boote pas.

- Je dois alors me tourner vers mon PC et Win32DiskImager qui fait le boulot en quelques minutes, 10 min env.

C'est étonnant de voir la petite carte booter sans problème avec la toute dernière version d'Ubuntu.

L'install de Swift 3.0 se fait par l' expansion d'un zip dans la racine qui va peupler /usr/bin, /usr/lib etc
Il faut compléter par l'installation de clang 3.6 (c'est là que Ubuntu 16 est nécessaire)

La démo consiste à faire clignoter alternativement deux LEDs branchées sur les Broches GPIO 4 et 27 qui vont fournir du 3,3V lorsque le signal est à 1, via une résistance de 220 ohm pour réduire l'intensité autour de 15mA.

Pour cela, on dépend d'un package nommé SwiftGPIO sur GitHub. C'est encore un peu rugueux, entre le Package Manager qui va chercher la version qu'on ne demande pas et qui compile avec un warning, ou le git clone qui retourne la toute dernière version compilable, mais on y arrive. Il faut transformer les "CChar)" en "Char.self)". Il y a aussi un "<CChar>" qui reste comme il est.

Ensuite il faut organiser le projet pour pouvoir le construire:
Il faut mettre le source dans un dossier Sources et créer un fichier de build Package.swift (le makefile ou le pom, ...)
Un "swift build" fait le boulot.

L' exécutable est bien caché dans un dossier .build, mais au final, ça fonctionne, les LEDs clignotent. Idéalement, il faudrait intercepter le Ctrl-C pour mettre les deux signaux à zéro.
sudo .build/debug/SwiftyGpioDemo

J'ai trouvé l'exemple de code pour intégrer l'interception du ctrl-c
CODE
import Glibc
import SwiftyGPIO

enum Signal:Int32 {
case HUP = 1
case INT = 2
case QUIT = 3
case ABRT = 6
case KILL = 9
case ALRM = 14
case TERM = 15
}

typealias SignalHandler = __sighandler_t

func trap(signum:Signal, action:SignalHandler) {
signal(signum.rawValue, action)
}

let gpios = SwiftyGPIO.GPIOs(for: .RaspberryPi2)

// GPIO4 and GPIO27
let leds = [gpios[.P4]!, gpios[.P27]!]

// Initialize our GPIOs
func reset() {
for led in leds {
led.direction = .OUT
led.value = 0
}
}
trap(signum: .INT) { signal in
print("Intercepted signal: \(signal)")
reset()
exit(0)
}

// Blink
reset()
while true {
for led in leds {
led.value = 1
sleep(1)
led.value = 0
}
}


Ce message a été modifié par Jaypee - 27 Jun 2016, 10:01.
Fichier(s) joint(s)
Fichier joint  SwiftyGpioDemo.zip ( 1.88 Ko ) Nombre de téléchargements : 2
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th March 2024 - 04:01