@simmikolon,
We started using the Photon / P1 about 7 months ago to determine if it was really worthy for the consumer market.
The short answer is YES!!! I would not even consider any product if i had one instance where it failed or acted hanky to do something. If it failed once i can guarantee you it will do it again even if it does not seem to do it again for 30 days. Problems just donât go away. With all the months of hard testing we have done with it I have extreme confidence in the Photon / P1 product.
If I could nit pick anything about Particle is that they donât have a GUI tool to upload the user .bin file via USB. For us this is the biggest problem, as some of our customers may need to update the firmware without using Wi-Fi, and it would be sure nice to simply send them the .bin file in an e-mail, and they just plug it into the USB port and click a few GUI buttons and flash it. Not sure why Particle is so slow to develop such a thing.
The longer version is:
There was a little learning curve in the beginning as I also had some of the same issues you were talking about in you OP. However, all of the issues with connectivity and updating were because of the way I wrote my code, and not because of the device itself. Many people just jump right in and start coding without talking the time to read about how things work and the correct way to do things. People do far to much copy and pasting code examples just to get it to work, rather than to take the time to understand what its really doing and how it may impact the system.
From what I have seen when some people have an issue with updating is that itâs their code is what is causing the problem. One needs to keep in mind that not only is your code running here but there is allot of other code that needs to run as well, like all the networking code. So if the user code (loop function) does not release CPU time to allow the networking code to run because your stuck in some while loop, its not the devices fault it does not work properly.
One of the things that helped us was:
//https://docs.particle.io/reference/firmware/photon/#system-thread
SYSTEM_THREAD(ENABLED);
Another was to avoid things like:
while(digitalRead(A0) == TRUE);
One needs to keep in mind this is not an Arduino, It much more than that. the above code is fine for Arduino, because it does not need to do anything else but sit there and wait. However, for us we need to periodically release CPU time to run the network code to check for updates and other things. Being stuck in some loop like the above we cannot release CPU time to do that. Once people understand this, and code with this in mind things run smoothly.
To bore you even more, but really bring this concept home. Say you added a 4.3" LCD like we did using SPI to update the screen. You can imagine just how much data is needed to send to the LCD to set every pixel color.
480 x 272 = 130,560 pixels. Each pixel has an RGB value, so now your talking 130,560 * 3 = 391,680.
At this point you need to think at a bare minimum without commands codes I need to shoot out 391,680 SPI writes to the LCD. Iâll just stick that in a for loop and do that. Ok, no problem. But while your doing that time intensive process are you releasing time to the CPU to run the network stack?
Moreover, how often do you want to update the screen? If you do it to often all you will do is tie up the CPU sending data to the LCD and never have enough CPU time to handle all the background processes it needs to run.
Sorry all if I got long in the tooth here. These are really great devices, and I just wanted to hopefully make the point of that clear.